从中读取了 4 个字节TCPSocket
(实际上套接字返回一个字符串,然后我调用.bytes
以获取一个数组)。现在需要将它们转换为 int32 大端。
或者可能是 TCPSocket 有一些方法可以立即读取 int32?
从中读取了 4 个字节TCPSocket
(实际上套接字返回一个字符串,然后我调用.bytes
以获取一个数组)。现在需要将它们转换为 int32 大端。
或者可能是 TCPSocket 有一些方法可以立即读取 int32?
您可以使用String#unpack。该参数指示转换的类型。"N"
在下面使用并表示“32 位无符号网络(大端)字节顺序”。查看所有选项的链接。
"\x00\x00\x00\x01".unpack("N")
# => [1]
"\x00\x00\x00\xFF".unpack("N")
# => [255]
注意结果是Array
,所以应用[0]
or.first
来获得Fixnum
。
Array#pack 的原始答案将字节数组转换为二进制字符串:
你可以使用数组#pack
# unsigned 32-bit integer (big endian)
bytes.pack('L>*')
# signed 32-bit integer (big endian)
bytes.pack('l>*')
也许您会发现该N
指令很有用,它代表“网络字节顺序”
# 32-bit unsigned, network (big-endian) byte order
bytes.pack('N*')