【问题标题】:C/C++: How to convert 6bit ASCII to 7bit ASCIIC/C++:如何将 6 位 ASCII 转换为 7 位 ASCII
【发布时间】:2009-04-20 13:12:48
【问题描述】:

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

感谢您的帮助。

伦纳特

【问题讨论】:

  • 您需要提供更多信息。您的 6 位数据来自哪里? (也许是 LabView?)

标签: c++ c ascii


【解决方案1】:

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 位字符有意义。

【讨论】:

  • 嘿,也许它与同样非标准的“扩展ASCII”相反,标题为“收缩ASCII”。
【解决方案2】:

您必须告诉我们您的 6 位字符集的外观,我认为没有标准。

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

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

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

你用你的一个六位字符索引到sixToSeven,然后取回本地的七位字符。

【讨论】:

【解决方案3】:

我无法想象您为什么会变旧 DEC-10/20 SIXBIT,但如果是这样,那么只需添加 32(十进制)。 SIXBIT 取的是以空格(32)开头的 ASCII 字符,所以只需在 SIXBIT 字符上加 32 即可得到 ASCII 字符。

【讨论】:

    【解决方案4】:

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

    6 位值取自字符:

    ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
    

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

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

    如果您的数据是这样编码的,那么周围有很多 sn-ps 会告诉您如何对其进行解码(并且许多语言都内置了编码器和解码器,或者在包含的库中)。维基百科有一篇很好的文章here

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

    【讨论】:

      【解决方案5】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2017-04-26
        • 2012-08-16
        • 2017-06-03
        • 1970-01-01
        • 2013-04-15
        • 2015-10-10
        • 1970-01-01
        • 2020-06-14
        • 1970-01-01
        相关资源
        最近更新 更多