Zapisałem uuid4 bez myślników, używając natywnego UNHEX () jako binarnego w MySQL i używam natywnej funkcji HEX () do pobrania uuid4.

Przykład:

UUID4: UNHEX("7D96F13AC8394EF5A60E8252B70FC179")
BINARY IN MySQL: }éŽ:·9NŠÙ ýRÈ ¾y
UUID4: HEX(UUID4Column)

Działa to dobrze do przechowywania i pobierania za pomocą funkcji HEX () i UNHEX ().

Jednak używając ORM sqlalchemy i deklarując UUID4Column jako LargeBinary (16), zwracana wartość to b'}\x96\xf1:\xc89N\xf5\xa6\x0e\x82R\xb7\x0f\xc1y'

Jak przekonwertować te bajty na 7D96F13AC8394EF5A60E8252B70FC179 w kodzie Pythona?

0
JohnnyCc 3 kwiecień 2020, 10:38

3 odpowiedzi

Najlepsza odpowiedź

Bez importu:

Możesz użyć int.from_bytes i formatowanie ciągu z 'X', aby uzyskać reprezentację szesnastkową liczby całkowitej:

s = b'}\x96\xf1:\xc89N\xf5\xa6\x0e\x82R\xb7\x0f\xc1y'

nicer = f"{(int.from_bytes(s,byteorder='big')):X}"
print(nicer)

Wydruki:

7D96F13AC8394EF5A60E8252B70FC179
3
Patrick Artner 3 kwiecień 2020, 07:45

To zadziałało dla mnie:

>>> print(b'}\x96\xf1:\xc89N\xf5\xa6\x0e\x82R\xb7\x0f\xc1y'.hex())
7d96f13ac8394ef5a60e8252b70fc179

Po prostu podaj swoje dane bajtowe w zmiennej lub takiej i .hex() to jako odpowiedź. Lubię to:

byte_data = b'}\x96\xf1:\xc89N\xf5\xa6\x0e\x82R\xb7\x0f\xc1y'
print(byte_data.hex())
2
JenilDave 26 lipiec 2020, 07:26

Możesz użyć binascii.hexlify:

>>> import binascii
>>> bs = b'}\x96\xf1:\xc89N\xf5\xa6\x0e\x82R\xb7\x0f\xc1y'
>>> binascii.hexlify(bs)
b'7d96f13ac8394ef5a60e8252b70fc179'

>>> # for str result
>>> binascii.hexlify(bs).decode('ascii')
'7d96f13ac8394ef5a60e8252b70fc179'
2
snakecharmerb 3 kwiecień 2020, 07:42