如何将 16 位二进制文​​件转换为 32 位文件?

How to convert 16bit binary file to 32bit file?

我有几个 16 位二进制文​​件,我需要将它们转换成 python 中的 32 位二进制文​​件。

我尝试了以下方法:

        data16 = np.fromfile(data_dir+fn, dtype=np.uint16)
        print("16bit " + str(data16))

        convert = np.array(data16 * 256)
        print("32bit " + str(convert) + "\n")

我是处理数据文件和字节等的新手,但从我过去几个小时阅读的内容来看,这应该可行,不是吗?

根据我阅读的输出,它似乎在某些部分有效但在其他部分无效...非常令人困惑..

这是输出:

16bit [41238   273   257 ... 65456 65472 65482]
32bit [ 5632  4352   256 ... 45056 49152 51712]

16bit [41238   273   769 ...     4     1 65521]
32bit [ 5632  4352   256 ...  1024   256 61696]

16bit [41238   273   513 ...    52    75    67]
32bit [ 5632  4352   256 ... 13312 19200 17152]

这里是一部分(文件很大,pycharm只打印了一部分)。在最后一行中,最后 3 位已正确转换,但不是所有位,这是为什么?

您发现整数溢出。 np.uint16可以表示的最大值是2^16 = 65536.

41238 * 256 比 2^16 大得多。你得到的值是 41238 * 256 % 2^16.

为避免溢出,将您的数字转换为 np.uint32,然后乘以 256:

convert = data16.astype(np.uint32) * 256

请注意,您正在使用 2^8 乘数转换为 24 位范围,而不是 32 位范围。

import numpy as np

data16 = np.fromfile(data_dir+fn, dtype=np.uint16)
print("16bit " + str(data16))

data32 = data16.astype(dtype=np.uint32) * 256
print("32bit " + str(data32))