在Python中等效于buf.readUInt16LE(offset)

时间:2019-01-25 11:01:55

标签: python node.js

我正在寻找Python中此功能的等效功能(来自node.js)

buf.readUInt16LE(offset)

  

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

1 个答案:

答案 0 :(得分:2)

我不知道这些功能,尽管可能有一个软件包可以执行此操作。 使用标准库实用程序,您可以使用struct.unpackio.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"

iostruct模块的文档页面上的更多详细信息。