【发布时间】:2011-11-15 03:24:19
【问题描述】:
我正在尝试创建一个 PDU 编码器,这需要我:
- 将字符串中的每个字符转换为 ASCII 值
- 将 ASCII 值转换为 7 位二进制
- 使用this method - 将 7 位转换为 8 位。 我通过获取第一个 septet 并从下一个 septet 的末尾添加直到第一个 8 位(如 url 中所示)在一个函数中执行此操作。这基本上一直持续。
- 使用 8 位二进制,我可以将 PDU 字符串转换为十六进制。
使用时一切正常:
ASCII = Convert.ToInt32(char)-
Convert.ToString(ASCII, 2)= 7 位 -
SeptetToOctet(7bit)= 8bit(我的功能) -
Convert.ToString(Convert.ToInt32(8bit, 2), 16).ToUpper()(如果转换为仅 1 个字符,我将添加 0)
现在我的问题来了,当尝试转换特殊字符时,比如丹麦语 'ø',你会得到 248 的 ASCII 值,Convert.ToString(248, 2) 给我11111000(8 位)。因此,要么我需要知道如何强制将“ø”转换为 7 位二进制,要么需要修改 SeptetToOctet 转换(这是提供的 URL 上的转换),但我现在确实有足够的关于二进制和二进制转换的知识知道如何正确处理。
【问题讨论】:
-
ASCII 没有 值 248。ASCII 是 7 位编码。您需要弄清楚您真正在谈论哪种编码。
-
好吧 - 我查看了 MSDN,它说 ToInt32 提供 UTF-16 编码。所以不是 ASCII,而是 UTF-16
-
嗯
char本质上是一个 UTF-16 代码单元。您根本不需要致电Convert.ToInt32。但基本上,如果你有非 ASCII 字符,你需要知道它们是如何表示的...... -
@Jon Skeet:他的字符是 7 位 GSM 字母表,只需要另一个 ascii 代码。丹尼尔看看我的回答。