2015-04-04 3 views
0

Я хочу отправить bytearray с помощью последовательного модуля. Элементы в bytearray - это типы данных с плавающей точкой, которые округлены и преобразуются в целые числа. По этой причине я использую numpy для повышения скорости, а не для собственных функций преобразования типов данных pythons. Проблема в numpy неверно представляет десятичные целые числа 9, 10 и 13 внутри bytearray. Я использую python 3.4.2 и numpy 1.9.2 для Windows 7 x64.Как исправить представление python модуля numpy в виде шестнадцатеричных чисел

Вот пример проблемы:

import numpy 
    >>> x = bytearray([]) 
    >>> for i in range(20): 
     x.append(numpy.int16(i)) 
    >>> x 
    bytearray(b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13') 

десятичных чисел 9, 10, 13 становятся т, п, а г, когда они должны быть представлены как 0x09, 0x0A, 0x0D

+0

Кроме того, вы говорите, что используете «numpy for speed efficiency», но на самом деле вы не похожи; Скорость numpy исходит из быстрых операций массива, и вы используете медленный цикл Python. Конечно, ваш реальный код может отличаться, но тот факт, что вы не использовали 'arange' с' dtype', заставляет меня подозревать иначе. – DSM

ответ

1

Значения фактически верный. То, что вы видите, - это то, как печать, вызывающая repr на объект, форматирует их как байты как escape-последовательности. \n - то же, что и \x0a, так как 0a - 10. \n выбран более \x0a, поскольку он короче и легче распознается.

Теперь, если вы хотите напечатать байты как шестнадцатеричные, как в 45, а не \x45, используйте функцию binascii.hexlify для преобразования перед печатью.

Смежные вопросы