这可能是一个简单的问题,但我正在尝试检查编码和字节(我暂时没有看过)来实现二进制协议。
看起来普通字符是1个字节。但是当你用Hex编码它们时,它会减少一半的字节数。
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
有人可以帮助澄清这里发生了什么吗?而且,如果你能指出我对在线编码的一个很好的评论,我很乐意刷新。我还没有看到任何简单的概述,这将是伟大的。
谢谢!
答案 0 :(得分:3)
#pack
读取给定的字符串,并根据给定的格式将其转换为二进制。 pack('H*')
表示您给出的字符串表示十六进制表示法,因此它将字节AB
和CD
从十六进制转换为二进制(1010 1011 1100 1101
),这是两个字节。
尝试["g"].pack("H*")
,其中g
不是有效的十六进制字符......