[英]How to convert an int to a hex string?
我想將一個整數(即 <= 255)轉換為十六進制字符串表示
例如:我想傳入65
並退出'\x41'
,或者255
並得到'\xff'
。
我試過用struct.pack('c',
65 )
來做這件事,但是因為它想要接受一個字符串,所以它會阻塞9
以上的任何東西。
您正在尋找chr
功能。
你似乎混合了整數的十進制表示和整數的十六進制表示,所以你需要什么並不完全清楚。 根據您提供的描述,我認為其中一個片段顯示了您想要的內容。
>>> chr(0x65) == '\x65'
True
>>> hex(65)
'0x41'
>>> chr(65) == '\x41'
True
請注意,這與包含整數為 hex 的字符串完全不同。 如果這是您想要的,請使用hex
內置。
這會將整數轉換為帶有 0x 前綴的 2 位十六進制字符串:
strHex = "0x%0.2X" % integerVariable
讓我添加這個,因為有時您只需要單個數字表示
( x
可以是小寫,'x',或大寫,'X',選擇確定輸出字母是大寫還是小寫。) :
'{:x}'.format(15)
> f
現在使用新的f''
格式字符串,您可以執行以下操作:
f'{15:x}'
> f
要添加0填充,您可以使用0>n
:
f'{2034:0>4X}'
> 07F2
注意:
f'{15:x}'
中的初始 'f' 表示格式字符串
嘗試:
"0x%x" % 255 # => 0xff
或者
"0x%X" % 255 # => 0xFF
Python 文檔說:“把它放在你的枕頭下面:http: //docs.python.org/library/index.html ”
使用format()
,根據format-examples ,我們可以這樣做:
>>> # 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'
如果您想打包一個值 <255(一個字節無符號,uint8_t)的結構並以一個字符的字符串結尾,那么您可能正在尋找格式 B 而不是 c 。 C 將字符轉換為字符串(本身不太有用),而 B 將整數轉換。
struct.pack('B', 65)
(是的,65 是 \x41,而不是 \x65。)
struct 類還將方便地處理字節序以進行通信或其他用途。
請注意,對於較大的值, hex()
仍然有效(其他一些答案無效):
x = hex(349593196107334030177678842158399357)
print(x)
Python 2: 0x4354467b746f6f5f736d616c6c3f7dL
Python 3: 0x4354467b746f6f5f736d616c6c3f7d
對於解密的 RSA 消息,可以執行以下操作:
import binascii
hexadecimals = hex(349593196107334030177678842158399357)
print(binascii.unhexlify(hexadecimals[2:-1])) # python 2
print(binascii.unhexlify(hexadecimals[2:])) # python 3
這對我最有效
"0x%02X" % 5 # => 0x05
"0x%02X" % 17 # => 0x11
如果您想要一個寬度更大的數字(2 代表 2 個十六進制打印字符),請更改 (2),因此 3 將為您提供以下信息
"0x%03X" % 5 # => 0x005
"0x%03X" % 17 # => 0x011
(int_variable).to_bytes(bytes_length, byteorder='big'|'little').hex()
例如:
>>> (434).to_bytes(4, byteorder='big').hex()
'000001b2'
>>> (434).to_bytes(4, byteorder='little').hex()
'b2010000'
您也可以將任何基數中的任何數字轉換為十六進制。 在這里使用這一行代碼,使用起來很簡單:
hex(int(n,x)).replace("0x","")
你有一個字符串n
,它是你的數字, x
是那個數字的底數。 首先,將其更改為整數,然后更改為十六進制,但十六進制的第一個為0x
,因此通過replace
我們將其刪除。
對於 Python >= 3.6,使用 f 字符串格式:
>>> x = 114514
>>> f'{x:0x}'
'1bf52'
>>> f'{x:#x}'
'0x1bf52'
我想要一個隨機整數轉換成一個六位數的十六進制字符串,開頭有一個#。 為了得到這個我用
"#%6x" % random.randint(0xFFFFFF)
作為替代表示,您可以使用
[in] '%s' % hex(15)
[out]'0xf'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.