如何将 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))
我有几个 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))