Obecnie pracuję nad programem do szyfrowania / deszyfrowania i muszę mieć możliwość konwersji bajtów na liczbę całkowitą. Wiem to:
bytes([3]) = b'\x03'
Jednak nie mogę się dowiedzieć, jak zrobić coś odwrotnego. Co ja robię strasznie źle?
python
python-3.x
int
type-conversion
byte
Vladimir Shevyakov
źródło
źródło
struct
moduł, jeśli chcesz konwertować wiele zmiennych jednocześnie.b'\x03'[0]
Odpowiedzi:
Zakładając, że masz co najmniej 3.2, jest wbudowany do tego :
## 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
źródło
int.from_bytes
iord(b'\x03')
dla pojedynczych bajtów / znaków?int.from_bytes
można interpretować jako bajt liczba całkowita ze znakiem, jeśli powiesz ją -int.from_bytes(b'\xe4', "big", signed=True)
wraca -28, podczasord()
lubint.from_bytes
w niepodpisanych zwrotów trybu 228.Listy bajtów są indeksowane (przynajmniej w Pythonie 3.6). W ten sposób możesz pobrać wartość dziesiętną każdego bajtu z osobna.
>>> 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
źródło
int.from_bytes( bytes, byteorder, *, signed=False )
nie działa ze mną Użyłem funkcji z tej strony, działa dobrze
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
źródło