如何以字节格式读取具有 16 位带符号整数的整个二进制文件,并将文件中的内容打印为 python 中的整数数组?

How to read the entire binary file which has 16 bit signed integers in byte format and print the content in file as array of integers in python?

如何将包含正整数和负整数的数组写入二进制文件。每个整数必须写成两个字节。以及如何通过将字节转换回整数来读取该二进制文件。

示例:arr=[-32767,-32789,-1200,0,6789,34589] -> 输入数组 每个值必须转换成两个字节并写入二进制文件“binaryfile.bin”

现在的要求是读取整个文件(“binaryfile.bin”)并将这些字节转换为值并将其打印为数组 outputarray=[-32767,-32789,-1200,0,6789, 34589]

Numpy 可以帮助您:

https://numpy.org/doc/stable/reference/generated/numpy.ndarray.tobytes.html

https://numpy.org/doc/stable/reference/generated/numpy.frombuffer.html

参见以下示例:

import numpy as np

arr = np.array([-32767,-32789,-1200,0,6789,34589], dtype=np.int16)

arr_bytes = arr.tobytes()
with open("binaryfile.bin", mode="wb") as file:
    file.write(arr_bytes)

with open("binaryfile.bin", mode="rb") as file:
    my_bytes = file.read()

np.frombuffer(my_bytes, dtype=np.int16)

请注意,数字 34589 大于 2^15,因此不能存储为两个字节的有符号整数,它将被转换为 -30947(整数溢出)。您可以存储第二个数组,指示哪个数字是有符号整数或无符号整数,但这可能比仅存储整数 32 更复杂。

注意: 作为与其他人共享二进制文件时的一个小警告,还请确保您同意字节顺序,请参阅 https://en.wikipedia.org/wiki/Endianness