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

时间:2018-06-15 10:23:14

标签: python numpy 32-bit data-conversion 16-bit

我有几个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位被正确转换但不是所有位,为什么会这样?

2 个答案:

答案 0 :(得分:2)

您看到整数溢出。 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位范围。

答案 1 :(得分:1)

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))