首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >替身信标数据包信号强度,负整数到二的补码十六进制

替身信标数据包信号强度,负整数到二的补码十六进制
EN

Stack Overflow用户
提问于 2018-07-14 03:11:30
回答 1查看 312关注 0票数 1

我正在尝试将一个负整数转换为一个二进制补码十六进制,该十六进制数可以放入signal_strength变量中的替罪包(下面)的十六进制代码中。

负数来自下面这行代码:

代码语言:javascript
复制
    sigstren = int(-1*(20*math.log10(distance) + 20*math.log10(frequency) - 37.55))

一个示例数字是-54,它的十六进制2的补码是FFCA,但我需要它的格式为\xca。

代码语言:javascript
复制
RadioTap(len=18, present='Flags+Rate+Channel+dBm_AntSignal+Antenna', notdecoded='\x00\x6c' +  get_frequency(CHANNEL) + '\xc0\x00' + signal_strength + '\x01\x00\x00')

我已经尝试过了:

代码语言:javascript
复制
    signal_string = struct.pack("<h", signal)

但是它返回\xca\xff,这对于数据包来说太大了。

我也尝试过这个:

代码语言:javascript
复制
    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以获得正确的数据包格式时,我遇到了这个错误:

代码语言:javascript
复制
    signal_strength = '\x' + signalstrength
EN

回答 1

Stack Overflow用户

发布于 2018-07-14 03:19:55

这有什么帮助吗?

代码语言:javascript
复制
>>> hex(0x100 - 0x54)
'0xac'

您只需翻转半个字节,并将0更改为\

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51331485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档