You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将标准UUID转换为蓝牙栈BT_UUID_INIT_128所需的十六进制数组

问题解答

1. 数组格式说明

你给出的0x6d, 0x1b...序列确实是十六进制格式的单字节值,0x是C语言中十六进制数值的标准前缀,每个元素对应一个8位无符号字节。

2. 转换逻辑说明

这个转换核心是大小端序反转,原因是你用到的BT_UUID_INIT_128是Zephyr蓝牙栈的宏,要求输入小端序的128位UUID字节序列,而标准UUID字符串的书写顺序是大端序,转换步骤如下:

  • 第一步:删除标准UUID字符串中的所有短横线-,得到32位连续的十六进制字符串
  • 第二步:将32位字符串按每2个字符为一组,拆分得到16个十六进制字节,此时得到的是UUID的大端序字节序列
  • 第三步:将16字节的大端序列整体反转,得到的就是BT_UUID_INIT_128要求的输入顺序

以你给出的UUID为例:
标准UUID:65210001-28D5-4B7B-BADF-7DEE1E8D1B6D
删除横杠后:6521000128D54B7BBADF7DEE1E8D1B6D
大端字节序列:[0x65, 0x21, 0x00, 0x01, 0x28, 0xD5, 0x4B, 0x7B, 0xBA, 0xDF, 0x7D, 0xEE, 0x1E, 0x8D, 0x1B, 0x6D]
反转后得到的小端序列:[0x6d, 0x1b, 0x8d, 0x1e, 0xee, 0x7d, 0xdf, 0xba, 0x7b, 0x4b, 0xd5, 0x28, 0x01, 0x00, 0x21, 0x65],和示例中的参数完全一致。

3. Python实现方案

推荐使用Python内置的uuid模块实现,逻辑简单且不易出错:

import uuid

def convert_uuid_to_bt_params(uuid_str: str) -> tuple[list[int], str]:
    """
    输入标准UUID字符串,返回小端序字节列表,以及可直接用于C代码的格式化字符串
    """
    # 解析标准UUID
    parsed_uuid = uuid.UUID(uuid_str)
    # bytes_le属性直接返回小端序字节序列
    little_endian_bytes = list(parsed_uuid.bytes_le)
    # 生成C代码格式的参数
    c_format_str = ", ".join([f"0x{b:02x}" for b in little_endian_bytes])
    return little_endian_bytes, c_format_str

# 测试
if __name__ == "__main__":
    test_uuid = "65210001-28D5-4B7B-BADF-7DEE1E8D1B6D"
    byte_list, c_params = convert_uuid_to_bt_params(test_uuid)
    print("小端序字节列表:", byte_list)
    print("C代码格式化参数:", f"BT_UUID_INIT_128({c_params})")

如果不想依赖uuid模块,也可以手动拆分反转实现:

def convert_uuid_manual(uuid_str: str) -> tuple[list[int], str]:
    clean_uuid = uuid_str.replace("-", "")
    # 拆分得到大端序字节列表
    big_endian = [int(clean_uuid[i:i+2], 16) for i in range(0, 32, 2)]
    # 反转得到小端序
    little_endian = big_endian[::-1]
    c_format_str = ", ".join([f"0x{b:02x}" for b in little_endian])
    return little_endian, c_format_str

运行上述代码输出的C参数和你给出的示例完全一致,可直接使用。

内容的提问来源于stack exchange,提问作者exile97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 04:12:09