Yanıtlar:
chr
İşlevi arıyorsunuz .
Tamsayıların ondalık gösterimlerini ve tamsayıların onaltılık gösterimlerini karıştırıyor gibi görünüyorsunuz, bu yüzden neye ihtiyacınız olduğu tam olarak açık değil. Verdiğiniz açıklamaya dayanarak, bu snippet'lerden birinin ne istediğinizi gösterdiğini düşünüyorum.
>>> chr(0x65) == '\x65'
True
>>> hex(65)
'0x41'
>>> chr(65) == '\x41'
True
Bunun hex olarak bir tamsayı içeren bir dizeden oldukça farklı olduğuna dikkat edin . İstediğiniz bu ise, hex
yerleşik olanı kullanın .
chr
ASCII içermez - sadece bir sayı alır ve baytın sıra değerinin sayı olduğu bir baytlık bir bayt yapar. Yan dizeleri yazıp görüntülerken ASCII ve ASCII uyumlu kodlamalar devreye girer.
'A'
yazmak ve görüntülemek için başka bir yol yaparak gelirler '\x41'
. Tüm str
gerçekten ilgili bu altmış beş olduğu gerçektir umurunda. İşleri insanlar tarafından anlaşılabilir ve kullanılabilir hale getirmek için, genellikle A olur
Ne olmuş hex()
?
hex(255) # 0xff
Gerçekten \
önde olmak istiyorsanız şunları yapabilirsiniz:
print '\\' + hex(255)[1:]
repr(chr(255)) # '\xff'
Ayrıca bunu başarıyor
Deneyin:
"0x%x" % 255 # => 0xff
veya
"0x%X" % 255 # => 0xFF
Python Documentation diyor ki: "bunu yastığının altında tut: http://docs.python.org/library/index.html "
Bunu eklememe izin verin, çünkü bazen sadece tek haneli temsili istersiniz:
'{:x}'.format(15)
> f
Ve şimdi yeni f''
biçim dizeleri ile şunları yapabilirsiniz:
f'{15:x}'
> f
NOT: ilk 'f' girişi
f'{15:x}'
bir biçim dizesini belirtmektir
<255 (bir bayt imzasız, uint8_t) değerine sahip bir yapı paketlemek ve bir karakterden oluşan bir dize oluşturmak istiyorsanız, büyük olasılıkla c yerine B biçimini arıyorsunuz . C bir karakteri dizeye dönüştürür (tek başına çok kullanışlı değildir), B ise bir tamsayıyı dönüştürür.
struct.pack('B', 65)
(Ve evet, 65 \ x41, \ x65 değil.)
Struct sınıfı, iletişim veya diğer kullanımlar için endianizmi de uygun şekilde ele alacaktır.
Büyük değerler için hex()
hala çalışır (diğer bazı cevapların işe yaramadığını) unutmayın:
x = hex(349593196107334030177678842158399357)
print(x)
Python 2: 0x4354467b746f6f5f736d616c6c3f7dL
Python 3:0x4354467b746f6f5f736d616c6c3f7d
Şifresi çözülmüş bir RSA mesajı için aşağıdakiler yapılabilir:
import binascii
hexadecimals = hex(349593196107334030177678842158399357)
print(binascii.unhexlify(hexadecimals[2:-1])) # python 2
print(binascii.unhexlify(hexadecimals[2:])) # python 3
Ben başında bir # ile altı basamaklı bir hex dizeye dönüştürülmüş rastgele bir tamsayı istedim. Bunu elde etmek için kullandım
"#%6x" % random.randint(0xFFFFFF)
"#%6x" % random.randint(0x0, 0xFFFFFF)
. (Daha %
önce bir eksik var 6
ve daha düşük randint
ve üst sınırlar) 2 parametre alır)
İle format()
uyarınca, biçim-örnekler , yapabileceğimiz:
>>> # format also supports binary numbers
>>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)
'int: 42; hex: 2a; oct: 52; bin: 101010'
>>> # with 0x, 0o, or 0b as prefix:
>>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42)
'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010'
(int_variable).to_bytes(bytes_length, byteorder='big'|'little').hex()
Örneğin:
>>> (434).to_bytes(4, byteorder='big').hex()
'000001b2'
>>> (434).to_bytes(4, byteorder='little').hex()
'b2010000'
Ayrıca herhangi bir bazdaki herhangi bir sayıyı hex'e dönüştürebilirsiniz. Bu tek satır kodunu kullanın, kullanımı kolay ve basittir:
hex(int(n,x)).replace("0x","")
Bir dize var n
senin numarası ve bir x
o sayının tabanı. İlk olarak, tamsayıya ve sonra onaltılı olarak değiştirin, ancak hex'in 0x
ilkinde vardır , böylece replace
kaldırırız.