Chcę wziąć liczbę całkowitą (która będzie <= 255) do reprezentacji ciągu szesnastkowego
np .: Chcę 65
wejść i wyjść '\x41'
lub 255
dostać '\xff'
.
Próbowałem to zrobić z struct.pack('c',
65 )
, ale to dusi wszystko powyżej, 9
ponieważ chce przyjąć ciąg znaków składający się z jednego znaku.
chr
ogóle nie obejmuje ASCII - po prostu pobiera liczbę i wykonuje bajt jednobajtowy, w którym wartością porządkową bajtu jest liczba. Kodowania zgodne z ASCII i ASCII wchodzą w grę, gdy piszesz i wyświetlasz bajtowanie.'A'
inny sposób pisania i wyświetlania'\x41'
. Wszystko, na czymstr
naprawdę zależy, to fakt, że jest to sześćdziesiąt pięć. Aby uczynić rzeczy zrozumiałymi i użytecznymi dla ludzi, często staje się literą A.Spowoduje to konwersję liczby całkowitej na 2-cyfrowy ciąg szesnastkowy z przedrostkiem 0x:
źródło
Co
hex()
?Jeśli naprawdę chcesz mieć
\
z przodu, możesz:źródło
repr(chr(255)) # '\xff'
osiąga to równieżPróbować:
lub
Dokumentacja Python mówi: „trzymaj to pod swoją poduszką: http://docs.python.org/library/index.html ”
źródło
Pozwól, że dodam ten, ponieważ czasami potrzebujesz tylko jednocyfrowej reprezentacji:
A teraz dzięki nowym
f''
ciągom formatującym możesz:źródło
Jeśli chcesz spakować strukturę o wartości <255 (jeden bajt bez znaku, uint8_t) i skończyć ciągiem jednego znaku, prawdopodobnie szukasz formatu B zamiast c . C konwertuje znak na ciąg (sam w sobie niezbyt użyteczny), podczas gdy B konwertuje liczbę całkowitą.
(I tak, 65 to \ x41, a nie \ x65.)
Klasa struct również wygodnie poradzi sobie z endianizmem w komunikacji lub innych zastosowaniach.
źródło
Pamiętaj, że w przypadku dużych wartości
hex()
nadal działa (niektóre inne odpowiedzi nie):Python 2:
0x4354467b746f6f5f736d616c6c3f7dL
Python 3:
0x4354467b746f6f5f736d616c6c3f7d
W przypadku odszyfrowanego komunikatu RSA można wykonać następujące czynności:
źródło
To działało dla mnie najlepiej
Zmień (2), jeśli chcesz liczbę o większej szerokości (2 dotyczy 2 znaków drukowanych heksadecymalnie), więc 3 da ci następujące
źródło
Chciałem, aby losowa liczba całkowita została przekształcona w sześciocyfrowy ciąg szesnastkowy ze znakiem # na początku. Aby to uzyskać, użyłem
źródło
"#%6x" % random.randint(0x0, 0xFFFFFF)
. (Brakuje%
wcześniej6
irandint
zajmuje 2 parametry - dolną i górną granicęZa pomocą
format()
, zgodnie z przykładami formatu , możemy:źródło
Na przykład:
źródło
Możesz także przekonwertować dowolną liczbę w dowolnej bazie na heks. Użyj tego kodu jednego wiersza tutaj, jest łatwy i prosty w użyciu:
hex(int(n,x)).replace("0x","")
Masz ciąg znaków,
n
który jest twoim numerem ix
podstawą tego numeru. Najpierw zmień go na liczbę całkowitą, a następnie na hex, ale hex ma0x
na początku, więc wraz zreplace
nim usuwamy.źródło
Jako alternatywną reprezentację możesz użyć
źródło