Как преобразовать 16-битный двоичный файл в 32-битный файл?

у меня есть несколько 16-битных двоичных файлов, которые мне нужно преобразовать в 32-битные двоичные файлы в python.

я пробовал следующее:

        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 бита, но не все биты, почему?


person Nanoni    schedule 15.06.2018    source источник


Ответы (1)


Вы видите целочисленное переполнение. Максимальное значение, которое может представлять np.uint16, равно 2^16 = 65536.

41238 * 256 намного больше, чем 2^16. Вы получите 41238 * 256 % 2^16.

Чтобы избежать переполнения, преобразуйте свои числа в np.uint32, а затем умножьте на 256:

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

Обратите внимание, что вы конвертируете в 24-битный диапазон с коэффициентом умножения 2 ^ 8, а не в 32-битный диапазон.

person w-m    schedule 15.06.2018