我有一个来自COM端口的原始十六进制,我想表示为十六进制值,以后可以用于按位操作。
例如,我有1035,但我希望它为0x1035。
我相对确定hex()函数不是我想要的。这会将int(1035)转换为十六进制40B。
我尝试将'0x'连接到我的值,我发现的问题是,然后输入str,我不能按位&,|等。将其转换为int会导致:以10为底的int()无效文字:'0x1035'
我已经尝试将十六进制转换为二进制,但与以前使用str类型而不是int类型相同。
例如,当我定义时,生活变得容易得多,例如十六进制= 0x1035。但我希望此功能可用于来自com端口的许多消息。
如何将字符串“ 0x1035”转换为十六进制整数?或者,如何告诉解释器我想要将int 1035解释为十六进制0x1035?
在此之上的一些好的评论指向了很好的参考。 2件事值得一提。当您说“从端口获取原始十六进制”时,我假设当您将这些数字提取到python中时,数据类型是表示十六进制值的string
。如果是这样,您可以将其转换]
In [17]: input_data = ['10', '1035', 'FF', 'A']
In [18]: hex_data = [int(t, 16) for t in input_data]
In [19]: hex_data
Out[19]: [16, 4149, 255, 10]
现在python将这些内容存储为整数值,您可以对它们进行按位运算,这显然是以base-2表示形式执行的。然后,您可以根据需要表达输出。内存中存在相同的基础数字... python可以用很多基数来表示它。
In [20]: d1 = 'A'
In [21]: d2 = '3'
In [22]: d1 = int(d1, 16)
In [23]: d2 = int(d2, 16)
In [24]: d1
Out[24]: 10
In [25]: d2
Out[25]: 3
In [26]: d1&d2
Out[26]: 2
In [27]: # let's check...
In [28]: bin(d1)
Out[28]: '0b1010'
In [29]: bin(d2)
Out[29]: '0b11'
In [30]: # looks right..... (it is)