【问题标题】:UUID to (hex array?)UUID 到(十六进制数组?)
【发布时间】:2021-09-08 12:45:57
【问题描述】:

我正在关注一个教程,它说 UUID 是 65210001-28D5-4B7B-BADF-7DEE1E8D1B6D 然后他以这种格式将其添加到代码中,但没有解释转换是如何发生的:

// Simple Service UUID: 65210001-28D5-4B7B-BADF-7DEE1E8D1B6D
static struct bt_uuid_128 simple_service_uuid =
    BT_UUID_INIT_128(0x6d, 0x1b, 0x8d, 0x1e, 0xee, 0x7d, 0xdf, 0xba, 0x7b,
             0x4b, 0xd5, 0x28, 0x01, 0x00, 0x21, 0x65);

我很好奇,0x6d, 0x1b, 0x8d, 0x1e, 0xee, 0x7d, 0xdf, 0xba, 0x7b,0x4b, 0xd5, 0x28, 0x01, 0x00, 0x21, 0x65 到底是什么格式?十六进制?

如何从 UUID 获取到数组?我已经尝试过十六进制转换和其他一些 python 编码,但我无法创建任何接近的东西。 我希望在 python 中进行转换

【问题讨论】:

  • 反向 65210001-28D5-4B7B-BADF-7DEE1E8D1B6D 一次取 2 个:6D 1B 8D 1E EE 7D ... -> BT_UUID_INIT_128(0x6d, 0x1b, 0x8d, 0x1e, 0xee, ...)
  • 哇,我从来没有注意到,谢谢!我仍然很好奇,是十六进制还是字节数据(或其他什么?)。 @PatrickArtner 标记为 python 因为我正在尝试在 python 中进行转换,对不起!
  • 0x6d 是 2 字节(16 位),表示为十六进制数字(数字中前面字母 af 中的 0x 是赠品) - 至于为什么它被反转 - 谷歌使用的语言和BT_IIOD_INIT_128 以获取有关所用结构的更多信息。
  • 好的,我明白了。我现在将编写一个 python 脚本来为我制作数组;)感谢帮助!
  • 这真的取决于BT_UUID_INIT_128 是如何定义的,以及它所应用的结构。也许任何有文档的库

标签: python hex uuid


【解决方案1】:

感谢 Patrick Artners 的帮助,这是 python 解决方案:

    uuid = input('Enter a UUID: ')
    uuid = uuid.replace('-', '')
    uuid = uuid[::-1] #reverse the string
    hexArrayStr = ''
    splitToTwos = map(''.join, zip(*[iter(uuid)]*2))
    count = 0
    for v in splitToTwos:
        count+=1
        hexArrayStr = hexArrayStr + ('0x'+(v[::-1]).lower())
        if count != 16:
            hexArrayStr = hexArrayStr + ', '
    print(hexArrayStr)

打印0x6d, 0x1b, 0x8d, 0x1e, 0xee, 0x7d, 0xdf, 0xba, 0x7b, 0x4b, 0xd5, 0x28, 0x01, 0x00, 0x21, 0x65

【讨论】:

  • @selbie 其他人告诉我它不应该被标记为 python 所以我删除了标签..?我会重新添加它。 (见 cmets 的回答)
猜你喜欢
  • 2018-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-09
  • 2020-02-09
  • 2015-01-21
  • 2016-09-06
  • 2011-04-18
相关资源
最近更新 更多