2009-04-20 278 views
2

我有一组6位,代表了7位ASCII字符。我如何从我拥有的6位中得到正确的7位ASCII码?只需追加一个零并执行按位或?C/C++:如何6bit的ASCII码转换为位的ASCII

感谢您的帮助。

伦纳特

+0

您需要提供更多信息。你的6位数据来自哪里? (LabView也许?) – 2009-04-20 21:40:55

回答

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

嘿,也许它与标准的“Contracted ASCII”同样是非标准的“扩展ASCII”的反义词。 – dreamlax 2009-04-20 13:19:48

2

你必须告诉我们的字符的6位的设置看起来如何,我不认为这是一个标准。

做反向映射将可能只使用一个查找表,像这样最简单的方法:

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

这假定空间被编码为(二进制)000000,大写字母A为000001,并等等。

您索引sixToSeven连同你的六千位人物之一,并获得当地的7位字符回。

+1

实际上有多个6位字符标准。 DEC已被提及。甚至最初还有一个5位字符编码标准:http://tamilelibrary.org/teli/history1.html – 2010-01-22 21:48:11

0

如果我给你一个位的值,我声称它是从Windows XP拍摄,你可以重建整个操作系统?

你不能。你失去了信息。没有办法重建,除非你有一些什么丢失的知识。如果你知道这一点,比如最重要的一点被砍掉了,那么你可以将它设置为零,并且你已经正确地重构了至少一半的字符。

如果你知道如何“a”和“Z”在你的6位编码来表示,您可能能够在通过比较它们自己的7位表示除去什么猜测。

1

最近只有6位代码,我所知道的是BASE64。这使用四个6位可打印字符来存储三个8位值(6x4 = 8x3 = 24位)。

的6比特的值从字符得出:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/ 

其是通的这些63.四(比如说UGF4)的值0用于表示3个8位值。

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

如果这是你的数据是如何编码的,有很多周围的片断将告诉您如何解读它(和许多语言有编码器和解码器内置的,或者在包括库)。维基百科有一篇好文章here

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

2

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