री-एन्कोडिंग वर्ण आम तौर पर तब किए जाते हैं जब प्राप्त प्रणाली उन्हें संसाधित नहीं कर सकती है। उदाहरण के लिए, BASE64 लंबे डेटा अनुक्रम (कभी-कभी दिखने वाला "==" अंत में संरेखण के लिए पैडिंग है) का प्रतिनिधित्व करने के लिए 6 बिट्स (2 6 , इसलिए 64) वर्णों का उपयोग करके डेटा का प्रतिनिधित्व कर रहा है। ऐसा इसलिए है क्योंकि ईमेल में आपकी चित्र फ़ाइल में 0xFE हो सकता है और आपका मेल सर्वर उस (या किसी अन्य पारंपरिक रूप से गैर-मुद्रण वर्ण) को प्रसारित करने से नाखुश होगा।
कोई एन्कोडिंग नहीं है जो "आकार को कम करता है।" एनकोडिंग केवल उस चरित्र के लिए बिट्स की मैपिंग हैं जो वे प्रतिनिधित्व करते हैं। उस ने कहा, ASCII एक 7 बिट कैरेक्टर सेट (एन्कोडिंग) है जिसे अक्सर 8 बिट्स स्पेस में स्टोर किया जाता है। यदि आप उन सीमाओं को सीमित करते हैं जिन्हें आप स्वीकार करते हैं, तो आप नियंत्रण वर्णों को भी मातम कर सकते हैं।
इस पद्धति का उपयोग करने का मतलब है कि आपको चीजों को बिट स्तर पर लिखना होगा, और यह मशीन की गति और निर्देशों के साथ थोड़ा नरक भी खेलता है क्योंकि सभी आधुनिक मशीनों में संरेखण होते हैं जो 8 बिट के गुणक होते हैं। उदाहरण के लिए, यही कारण है कि यूनिकोड UTF-8, UTF-16 और UTF-32 है।
यदि आप सुरक्षा के लिए ऐसा कर रहे हैं (इसीलिए आपने इसे Security.SE, right?) पर पोस्ट किया है, तो बस चीजों को फ़िल्टर करें और उन्हें सामान्य रूप से स्टोर करें। यदि आप अंतरिक्ष को बचाने के लिए ऐसा कर रहे हैं, तो विचार करें कि क्या सभी अतिरिक्त कोड और धीमी पहुंच समय (क्योंकि अधिकांश प्रविष्टियां पता सीमाओं को पार कर जाएंगी) अंतरिक्ष की बचत के लायक है।
द्वारा, निम्नलिखित एक सीएस कोर्स से स्निपेट है जहां हमें 8 बिट स्टोरेज से एएससीआईआई को 7 बिट में बदलना था:
memset(dest,0x00,8);
memcpy(dest, source, length);
for (int i = 0; i < 8; i++) {
if (dest[i] & 0x80) {
fprintf(stderr, "%s: %s\n", dest, "Illegal byte sequence");
exit(EILSEQ);
}
}
dest[0] = 0x7F & dest[0] | 0x80 & dest[1] << 7;
dest[1] = 0x3F & dest[1] >> 1 | 0xC0 & dest[2] << 6;
dest[2] = 0x1F & dest[2] >> 2 | 0xE0 & dest[3] << 5;
dest[3] = 0x0F & dest[3] >> 3 | 0xF0 & dest[4] << 4;
dest[4] = 0x07 & dest[4] >> 4 | 0xF8 & dest[5] << 3;
dest[5] = 0x03 & dest[5] >> 5 | 0xFC & dest[6] << 2;
dest[6] = 0x01 & dest[6] >> 6 | 0xFE & dest[7] << 1;
dest[7] = 0x00; //Clearing out