C / C ++:如何将6位ASCII转换为7位ASCII

时间:2009-04-20 13:12:49

标签: c++ c ascii

我有一组6位代表一个7位ASCII字符。如何从我拥有的6位中获取正确的7位ASCII码?只需追加零并按位OR?

感谢您的帮助。

伦纳特

5 个答案:

答案 0 :(得分:8)

ASCII本身就是一个7位字符集,所以你所拥有的不是“6位ASCII”。角色组成了哪些角色?最简单的解码方法可能是:

char From6Bit( char c6 ) {
    // array of all 64 characters that appear in your 6-bit set
    static SixBitSet[] = { 'A', 'B', ... }; 
    return SixBitSet[ c6 ];
}   

脚注:6位字符集在旧的DEC硬件上非常流行,其中一些像DEC-10一样具有36位架构,其中6位字符有一定意义。

答案 1 :(得分:2)

你必须告诉我们你的6位字符集是怎样的,我认为没有标准。

执行反向映射的最简单方法可能是使用查找表,如下所示:

static const char sixToSeven[] = { ' ', 'A', 'B', ... };

这假设空间编码为(二进制)000000,大写A编码为000001,依此类推。

使用您的六位字符之一索引sixToSeven,然后返回本地7位字符。

答案 2 :(得分:2)

我无法想象为什么你会变老DEC-10/20 SIXBIT,但如果是这样的话,那就加上32(十进制)。 SIXBIT采用以空格(32)开头的ASCII字符,因此只需在SIXBIT字符中添加32即可获得ASCII字符。

答案 3 :(得分:1)

我唯一知道的6位代码是base64。这使用四个6位可打印字符来存储三个8位值(6x4 = 8x3 = 24位)。

6位值来自字符:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

是值0到63.其中四个(比如UGF4)用于表示三个8位值。

UGF4 = 010100 000110 000101 111000
     = 01010000 01100001 01111000
     = Pax

如果这是您的数据编码方式,那么周围有很多片段会告诉您如何解码它(许多语言都内置了编码器和解码器,或者包含在库中)。维基百科有一篇很好的文章here

如果它 base64,那么你需要找出编码方案。一些较旧的方案使用移入/移出(SI / SO)代码的其他查找方法来选择字符集中的页面,但我认为更多的是选择扩展(例如,日语DBCS)字符而不是正常的ACSII字符

答案 4 :(得分:0)

如果我给你一个单位的价值,并且我声称它是从Windows XP中获取的,你能重建整个操作系统吗?

你做不到。你丢失了信息。除非你对丢失的有一些了解,否则无法重建。如果您知道,例如,最重要的位被切断,那么您可以将其设置为零,并且您已经正确地重建了至少一半的字符。

如果您知道在6位编码中如何表示'a'和'z',您可以通过将它们与7位表示进行比较来猜测删除的内容。