我正在尝试将一个负整数转换为一个二进制补码十六进制,该十六进制数可以放入signal_strength变量中的替罪包(下面)的十六进制代码中。
负数来自下面这行代码:
sigstren = int(-1*(20*math.log10(distance) + 20*math.log10(frequency) - 37.55))
一个示例数字是-54,它的十六进制2的补码是FFCA,但我需要它的格式为\xca。
RadioTap(len=18, present='Flags+Rate+Channel+dBm_AntSignal+Antenna', notdecoded='\x00\x6c' + get_frequency(CHANNEL) + '\xc0\x00' + signal_strength + '\x01\x00\x00')
我已经尝试过了:
signal_string = struct.pack("<h", signal)
但是它返回\xca\xff,这对于数据包来说太大了。
我也尝试过这个:
def int_to_hex_string(value, bits):
return "{0:0{1}X}".format(value & ((1<<bits) - 1), bits//4)
signalstrength = int_to_hex_string(sigstren, 8)
但这只会返回CA,由于ValueError: invalid \x转义,我无法将\x添加到它。在尝试添加\x以获得正确的数据包格式时,我遇到了这个错误:
signal_strength = '\x' + signalstrength
发布于 2018-07-14 03:19:55
这有什么帮助吗?
>>> hex(0x100 - 0x54)
'0xac'
您只需翻转半个字节,并将0
更改为\
https://stackoverflow.com/questions/51331485
复制相似问题