Преобразование байтов в Int в Python 3 - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть переменная с именем offset, которая принадлежит <class 'bytes'>.

Мне нужно найти разницу ч / б смещения и mapper [hash], здесь mapper [hash] принадлежит <class 'numpy.int64'> .

У меня есть следующая функция:

for hash, sid, offset in x:
     yield(sid, int(offset) - mapper[hash])

Примечание. В исходной функции смещение не типизировано до типа int. Я специально сделал это, чтобы получить разницу ч / б.

Но это выдает ошибку, говорящую

ValueError: invalid literal for int() with base 10: b'\xf9\x01\x00\x00\x00\x00\x00\x00'

Не удивительно, хотя при отладке я печатал смещение без приведения типов и нашел значения ->

b'\xcb\x10\x00\x00\x00\x00\x00\x00'
b'B\x10\x00\x00\x00\x00\x00\x00'
b'T\x1c\x00\x00\x00\x00\x00\x00'

Каковы возможные решения этой проблемы.

1 Ответ

0 голосов
/ 21 апреля 2020

Эти значения выглядят разумными?

In [292]: alist = [b'\xcb\x10\x00\x00\x00\x00\x00\x00', 
     ...: b'B\x10\x00\x00\x00\x00\x00\x00', 
     ...: b'T\x1c\x00\x00\x00\x00\x00\x00']                                                            
In [293]: [np.frombuffer(astr,int) for astr in alist]                                                  
Out[293]: [array([4299]), array([4162]), array([7252])]

Похоже, что каждая строка байтов составляет 8 байтов, поэтому может быть байтовое представление int64 объектов.

...