Python:将十六进制字符串转换为int和b

2024-05-13 05:30:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我的python脚本通过串行行获取和发送单词。 每个字都是一个有符号的24位值,作为十六进制字符串接收。 脚本现在应该接受这些字符串并将它们转换为整数,对其进行一些计算,然后以相同的格式将它们发送回来。 我的问题是,如何转换

Examples

Rx string -> calc int
 012345   ->  74565
 fedcba   -> -74566

calc int -> Tx string
  74565  -> 012345
 -74566  -> fedcba

怎么能做到?


Tags: 字符串脚本string格式符号calc整数rx
3条回答
def str_to_int(s):
    i = int(s, 16)
    if i >= 2**23:
        i -= 2**24
    return i

def int_to_str(i):
    return '%06x'%((i+2**24)%2**24)

测试结果:

In [36]: str_to_int('012345')
Out[36]: 74565

In [37]: str_to_int('fedcba')
Out[37]: -74566

In [38]: int_to_str(74565)
Out[38]: '012345'

In [39]: int_to_str(-74566)
Out[39]: 'fedcba'

引用:Hex string to signed int in Python 3.2?

(编辑:我的疏忽。请参阅Rob's answer以正确覆盖负号)

如果只想将十六进制字符串转换为int,请执行以下操作:

>>> int('0xff', 16)
255
>>> int('0xdaad', 16)
55981

相反,可以使用hex()函数来完成。从帮助页:

内置函数十六进制模块内置帮助:

>>> help(hex)
hex(...)
    hex(number) -> string

    Return the hexadecimal representation of an integer.

       >>> hex(3735928559)
       '0xdeadbeef'

如果数据流中缺少“x”,则删除或添加它应该很简单。 下面是一个确保填充到6个字符(表示3个字节=24位)的示例:

>>> '0x' + hex(255)[2:].rjust(6, '0')
'0x0000ff'

如果您以3字节(24位)的形式获取数据,则可以使用int.to_bytes()int.from_bytes(),如the Python docs中所述。这是Python3.2中的新功能。

$ pip install bitstring

然后:

from bitstring import BitStream
s1 = BitStream('0x012345')
s1.int # 74565
s2 = BitStream(int=-74565, length=24)
s2.hex # fedcbb

相关问题 更多 >