【问题标题】:Python - Converting raw hex to type 'int' [duplicate]Python - 将原始十六进制转换为类型“int”[重复]
【发布时间】:2020-06-25 23:46:52
【问题描述】:

我有一个来自 com 端口的原始十六进制值,我想将其表示为一个十六进制值,以后可以将其用于按位运算。

例如,我有 1035,我希望它为 0x1035。

我比较确定 hex() 函数不是我想要的。这会将 int(1035) 转换为十六进制 40B。

我尝试将“0x”连接到我的值,我发现的问题是它是类型 str,我不能按位 &、| 等。将其转换为 int 会导致: 基数为 10 的 int() 的无效文字:'0x1035'

我尝试将十六进制转换为二进制,但问题与之前的 str 类型而不是 int 类型相同。

例如,当我定义 hex = 0x1035 时,生活变得更加轻松。但我希望它可以重复用于来自 com 端口的许多消息。

如何将字符串“0x1035”转换为十六进制整数?或者,我如何告诉解释器我拥有的 int 1035,我想解释为十六进制 0x1035?

【问题讨论】:

标签: python string int hex


【解决方案1】:

上面的一些好的 cmets 指向好的参考。 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)    

【讨论】:

    猜你喜欢
    • 2015-04-15
    • 2016-07-24
    • 2011-11-27
    • 1970-01-01
    • 2017-12-30
    • 2023-03-08
    • 2017-05-29
    • 1970-01-01
    • 2015-09-17
    相关资源
    最近更新 更多