无符号字节数组转 HEX
Unsigned bytearray to HEX
我刚开始使用字节,我必须通过其有效负载 (bytearray) 上的某些值过滤掉一些 BLE 消息
根据我正在使用的设备的文档,有效负载的第 3 和第 4 个值对应于公司 ID。我得到的值是 [-38, 3]
,文档指出这个值应该是 0x03DA
。这些值完全兼容吗?我应该如何翻译以确保它没问题?
您没有说明您使用的是哪种语言,但可以提出一些关于蓝牙数据的一般要点。
来自 https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers/ :
如果十六进制值是 0x03DA
,十进制值是 986
,并且是 EnOcean GmbH。
蓝牙以小端格式传输字节,因此字节为 [0xDA, 0x03]
或 [218, 3]
。您看到 -38
的原因是因为该字节被视为有符号整数(有时称为短整数)而不是无符号整数(unsigned short)。
在 Python 中看起来像:
>>> int.from_bytes(b'\xDA\x03', byteorder='little', signed=False)
986
>>> hex(int.from_bytes(b'\xDA\x03', byteorder='little', signed=False))
'0x3da'
我刚开始使用字节,我必须通过其有效负载 (bytearray) 上的某些值过滤掉一些 BLE 消息
根据我正在使用的设备的文档,有效负载的第 3 和第 4 个值对应于公司 ID。我得到的值是 [-38, 3]
,文档指出这个值应该是 0x03DA
。这些值完全兼容吗?我应该如何翻译以确保它没问题?
您没有说明您使用的是哪种语言,但可以提出一些关于蓝牙数据的一般要点。
来自 https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers/ :
如果十六进制值是 0x03DA
,十进制值是 986
,并且是 EnOcean GmbH。
蓝牙以小端格式传输字节,因此字节为 [0xDA, 0x03]
或 [218, 3]
。您看到 -38
的原因是因为该字节被视为有符号整数(有时称为短整数)而不是无符号整数(unsigned short)。
在 Python 中看起来像:
>>> int.from_bytes(b'\xDA\x03', byteorder='little', signed=False)
986
>>> hex(int.from_bytes(b'\xDA\x03', byteorder='little', signed=False))
'0x3da'