我有一组6位代表一个7位ASCII字符。如何从我拥有的6位中获取正确的7位ASCII码?只需追加零并按位OR?
感谢您的帮助。
伦纳特
答案 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位表示进行比较来猜测删除的内容。