簡體   English   中英

如何將 int 轉換為十六進制字符串?

[英]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

hex()呢?

hex(255)  # 0xff

如果你真的想在前面有\你可以這樣做:

print '\\' + hex(255)[1:]

讓我添加這個,因為有時您只需要單個數字表示

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM