【发布时间】:2011-12-12 01:23:28
【问题描述】:
这可能是一个简单的问题,但我正在尝试查看编码和字节(我有一段时间没看过)以实现二进制协议。
看起来普通字符是 1 个字节。但是当你用十六进制编码它们时,它的字节数减半。
ruby-1.9.2-p180 :001 > "abcd".bytesize
=> 4
ruby-1.9.2-p180 :002 > ["abcd"].pack("H*")
=> "\xAB\xCD"
ruby-1.9.2-p180 :003 > ["abcd"].pack("H*").bytesize
=> 2
我也期待十六进制编码会出现字符 0-9 和 A-F
有人可以帮助澄清这里发生了什么吗?而且,如果您能指出我对在线编码的一般性很好的评论,我很乐意复习。我还没有看到任何简单的概述,这会很棒。
谢谢!
【问题讨论】:
-
看来你实际解码而不是十六进制编码为
abcd(四个字节)十六进制是171, 205(两个字节)十进制。 -
你想做什么?用十六进制表示每个字符的代码点?
-
一个字符就是一个字节。十六进制数字 [0-9A-F] 是一个 nybble 或半字节。例如,
FFhex 是一个字节的最大值。因此,您的发现是意料之中的:4 个字符的字符串是 4 个字节,而ABCD十六进制是两个字节,AB和CD。