4

从中读取了 4 个字节TCPSocket(实际上套接字返回一个字符串,然后我调用.bytes以获取一个数组)。现在需要将它们转换为 int32 大端。

或者可能是 TCPSocket 有一些方法可以立即读取 int32?

4

1 回答 1

6

您可以使用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*')
于 2014-05-23T08:37:43.413 回答