在处理报文数据时,出现了十六进制两字节带符号整型数据,由于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,)