在 Python 中将整数转换为 2 字节的十六进制值

Posted

技术标签:

【中文标题】在 Python 中将整数转换为 2 字节的十六进制值【英文标题】:Convert an integer to a 2 byte Hex value in Python 【发布时间】:2013-05-20 11:18:40 【问题描述】:

对于 tkinter GUI,我必须以“0x00”的形式读取十六进制地址来设置 I2C 地址。我目前的做法是将输入读取为字符串,将字符串转换为整数,然后将该整数转换为实际的十六进制值,如下面的部分代码所示:

界面初始化:

self.I2CAddress=StringVar()
self.I2CAddress.set("0x00") #Sets Default value of '0x00'
Label(frame, text="Address: ").grid(row=5, column=4)
Entry(frame, textvariable=self.I2CAddress).grid(row=5, column=5)

然后在函数内部:

addr = self.I2CAddress.get()   
addrint = int(addr, 16)  
addrhex = hex(addrint)

这适用于大多数值,但我的问题是,如果我输入一个小的十六进制值字符串,例如“0x01”,它会转换为正确的整数 1,但随后会转换为 0x1 的十六进制值而不是0x01。

我是一名 EE,并且编程经验非常有限,因此非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

使用format() function:

format(addrint, '#04x')

这会将输入值格式化为带有前导零的 2 位十六进制字符串以构成长度,# 包括“标准前缀”,在这种情况下为 0x。请注意,宽度 4 包括该前缀。 x 生成小写十六进制字符串;如果需要大写,请使用X

演示:

>>> for i in range(8, 12):
...     print format(i, '#04x')
... 
0x08
0x09
0x0a
0x0b

【讨论】:

谢谢!工作就像一个魅力,我真的很感激它 你回答得太快了,我得等几分钟才允许,但我绝对会的 您可以只使用:#02x 而不是显式的0x# 将添加“标准前缀”,对于十六进制数字是 0x。 (这也适用于 %-formatting、C printf 和 POSIX 命令行 printf 等) @abarnert:酷,我知道#前缀选项。 @abarnert:使用# 前缀,您可以只使用format() 函数,完全不用字符串模板。

以上是关于在 Python 中将整数转换为 2 字节的十六进制值的主要内容,如果未能解决你的问题,请参考以下文章

在Python 3中将十六进制字符串(python 2)转换为带有十六进制数字的字节

在 Python 中将十六进制字符串转换为字节列表

在 Python 3 中将字节转换为十六进制字符串的正确方法是啥?

在 JavaScript 中将整数转换为十六进制字符串

如何在 Python 中将字符串转换为十六进制整数?

将2个整数转换为十六进制/字节数组?