python 十进制和十六进制两字节带符号整型相互转换

在处理报文数据时,出现了十六进制两字节带符号整型数据,由于python没有这个类型,所以需要自己转换,我参考了一些资料,写出了python对应的代码。

资料地址:https://blog.csdn.net/happygrilclh/article/details/106194107

下面是转换的代码。

# 运算的数据是2字节带符号整型数据,当然可以按照需要自己修改

# 传入十六进制字符串,返回int类型
def str_to_signed_int_2bytes(data: str):
    int_data = int(data, 16)
    # 二进制数是1开头,即所代表的数是负数,转换出来的数字大于32768(0x8000)
    if int_data >= 32768:
        int_num = int_data - 65536
    else:
        int_num = int_data
    return int_num


# 传入int类型字符串,返回2字节带符号十六进制数据字符串
def signed_int_to_str_2bytes(int_num: int):
    if int_num < 0:
        int_temp = 65536 + integer
    else:
        int_temp = int_num
    str_hex = '{:04X}'.format(int_temp)
    return str_hex


print(str_to_signed_int_2bytes('ffff'))
print(signed_int_to_str_2bytes(-1))

输出结果

-1
FFFF

成功转换了,效果还行。

方法二

https://blog.csdn.net/PanDD_0_1/article/details/86687140
https://blog.csdn.net/funnyPython/article/details/78722239

print(struct.pack(', -1).hex())
print(struct.unpack(', bytes.fromhex('ffff')))

输出结果

ffff
(-1,)

你可能感兴趣的:(python)