我正在寻找Python中此功能的等效功能(来自node.js)
offset:开始读取之前要跳过的字节数。必须满足0 <=偏移量<= buf.length-2。
返回: 以指定的字节序格式以指定的偏移量从buf读取一个无符号的16位整数(readUInt16BE()返回大字节序,readUInt16LE()返回小字节序)。
示例:
const buf = Buffer.from([0x12, 0x34, 0x56]);
console.log(buf.readUInt16BE(0).toString(16));
// Prints: 1234
console.log(buf.readUInt16LE(0).toString(16));
// Prints: 3412
console.log(buf.readUInt16BE(1).toString(16));
// Prints: 3456
console.log(buf.readUInt16LE(1).toString(16));
// Prints: 5634
console.log(buf.readUInt16LE(2).toString(16));
// Throws ERR_OUT_OF_RANGE
答案 0 :(得分:2)
我不知道这些功能,尽管可能有一个软件包可以执行此操作。
使用标准库实用程序,您可以使用struct.unpack
和io.BytesIO
来转换和处理(二进制)缓冲区。
下面是一个示例(Python 3)。抱歉,如果感觉线条不太紧凑;我希望它仍然易于阅读。
import io
import struct
buf = io.BytesIO(bytearray([0x12, 0x34, 0x56]))
# < and > for little and big endian, H for 2-byte unsigned short.
assert format(struct.unpack(">H", buf.read(2))[0], '02x') == "1234"
# buf.seek to reset to byte 0 (1, 2) of the stream; also for file objects
buf.seek(0)
assert format(struct.unpack("<H", buf.read(2))[0], '02x') == "3412"
buf.seek(1)
assert format(struct.unpack(">H", buf.read(2))[0], '02x') == "3456"
buf.seek(1)
assert format(struct.unpack("<H", buf.read(2))[0], '02x') == "5634"
buf.seek(2)
try:
format(struct.unpack("<H", buf.read(2))[0], '02x')
except struct.error as exc:
assert exc.args[0] == "unpack requires a buffer of 2 bytes"
else:
assert False, "exception failed to be raised"