从TCPSocket
读取4个字节(实际上socket返回一个字符串,然后我调用.bytes
来获取一个数组)。现在需要将它们转换为int32 big endian。
或者可能TCPSocket有一些方法可以立即读取int32吗?
答案 0 :(得分:6)
您可以使用String#unpack。参数表示转换的类型。下面使用"N"
表示“32位无符号,网络(大端)字节顺序”。请参阅所有选项的链接。
"\x00\x00\x00\x01".unpack("N")
# => [1]
"\x00\x00\x00\xFF".unpack("N")
# => [255]
请注意,结果为Array
,因此请[0]
或.first
获取Fixnum
。
使用Array#pack的原始答案,将字节数组转换为二进制字符串:
您可以使用Array#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*')