Arrays 在Ruby中使用(";C";)指令打包到字节字符串
我试图使用Arrays 在Ruby中使用(";C";)指令打包到字节字符串,arrays,ruby,pack,unpack,Arrays,Ruby,Pack,Unpack,我试图使用array.pack(“C”)将字节数组打包成字符串,但我在打包时得到了一些奇怪的值。例如,当我说[7].pack(“C”)时,返回值是“\a”,而当我说“\x07.unpack(“C”)时,返回值是[7],这是所需的行为 [6]。例如,pack(“C”)返回“\x06”,再次返回所需的结果,而[33]。pack(“C”)返回”!“ 我一般不熟悉字节和十六进制。这里发生了什么?据我所知,[33]。pack(“C”)应该返回“\x21””为什么它会返回“\x21”?\x符号是为不可打印字
array.pack(“C”)
将字节数组打包成字符串,但我在打包时得到了一些奇怪的值。例如,当我说[7].pack(“C”)
时,返回值是“\a”
,而当我说“\x07.unpack(“C”)
时,返回值是[7]
,这是所需的行为
[6]。例如,pack(“C”)
返回“\x06”
,再次返回所需的结果,而[33]。pack(“C”)
返回”!“
我一般不熟悉字节和十六进制。这里发生了什么?据我所知,[33]。pack(“C”)
应该返回“\x21”
”为什么它会返回“\x21”
?\x
符号是为不可打印字符保留的,但由于\x21
相当于代码>然后这就是显示的内容
字符串的inspect
版本通常是它的可读性最高的版本,而不是文字最多的版本
同样地:
"!".ord
# => 33
"\x21".ord
# => 33
"\x21".ord.to_s(16)
# => "21"
33.chr
# => "!"
有许多特殊字符:
为什么它会返回“\x21”
?\x
符号是为不可打印字符保留的,但由于\x21
相当于代码>然后这就是显示的内容
字符串的inspect
版本通常是它的可读性最高的版本,而不是文字最多的版本
同样地:
"!".ord
# => 33
"\x21".ord
# => 33
"\x21".ord.to_s(16)
# => "21"
33.chr
# => "!"
有许多特殊字符:
这些字符串完全等效,如果字节完全相同,则它们只是不同的表示形式:
"\a" == "\x07"
# => true
"\x21" == "!"
# => true
如果您看一下,您将看到十六进制21(十进制33)由感叹号字符表示。类似地,十六进制7(和十进制7)字符由一个名为BEL(bell)的控制字符表示,我们通常将其表示为“\a”
一般来说,Ruby在打印字符串时会选择最通用的字符串表示形式。您可以在代码中使用其他(等效)表示。但是,将始终映射回内存中完全相同的字节。这些字符串完全等效,如果完全相同的字节:
"\a" == "\x07"
# => true
"\x21" == "!"
# => true
如果您看一下,您将看到十六进制21(十进制33)由感叹号字符表示。类似地,十六进制7(和十进制7)字符由一个名为BEL(bell)的控制字符表示,我们通常将其表示为“\a”
一般来说,Ruby在打印字符串时会选择最通用的字符串表示形式。您可以在代码中使用其他(等效)表示。但是,将始终映射回内存中完全相同的字节