В настоящее время я работаю над программой шифрования / дешифрования, и мне нужно иметь возможность преобразовывать байты в целое число. Я знаю это:
bytes([3]) = b'\x03'
Однако я не могу понять, как сделать обратное. Что я делаю ужасно неправильно?
python
python-3.x
int
type-conversion
byte
Владимир Шевяков
источник
источник
struct
модуль, если вы хотите преобразовать сразу несколько переменных.b'\x03'[0]
Ответы:
Предполагая, что вы используете как минимум 3.2, для этого есть встроенная функция :
## Examples: int.from_bytes(b'\x00\x01', "big") # 1 int.from_bytes(b'\x00\x01', "little") # 256 int.from_bytes(b'\x00\x10', byteorder='little') # 4096 int.from_bytes(b'\xfc\x00', byteorder='big', signed=True) #-1024
источник
int.from_bytes
иord(b'\x03')
для одиночных байтов / символов?int.from_bytes
можно интерпретировать байты как целое число , если сказать это -int.from_bytes(b'\xe4', "big", signed=True)
возвращает -28, в то времяord()
илиint.from_bytes
в неподписанных возвратах режиме 228.Списки байтов можно индексировать (по крайней мере, в Python 3.6). Таким образом, вы можете получить десятичное значение каждого байта по отдельности.
>>> intlist = [64, 4, 26, 163, 255] >>> bytelist = bytes(intlist) # b'@x04\x1a\xa3\xff' >>> for b in bytelist: ... print(b) # 64 4 26 163 255 >>> [b for b in bytelist] # [64, 4, 26, 163, 255] >>> bytelist[2] # 26
источник
int.from_bytes( bytes, byteorder, *, signed=False )
не работает со мной Я использовал функцию с этого сайта, она работает хорошо
https://coderwall.com/p/x6xtxq/convert-bytes-to-int-or-int-to-bytes-in-python
def bytes_to_int(bytes): result = 0 for b in bytes: result = result * 256 + int(b) return result def int_to_bytes(value, length): result = [] for i in range(0, length): result.append(value >> (i * 8) & 0xff) result.reverse() return result
источник