将#define从bytes转换为string

时间:2017-02-28 07:37:09

标签: c

我正在使用一些用于BLE连接的示例项目,代码的一部分如下所示:

#define UUID_BASE "\xaa\x82\xe0\x12\x69\xa2\x4b\xe7\x93\xe4\x19\xc9\x00\x00\x00\x00"

#define USER_ADVERTISE_SCAN_RESPONSE_DATA ("\x10"\UUID_BASE)

const struct data_struct
= {

    .
    .
    .APP_BLE_ADV_DATA              = USER_ADVERTISE_DATA,
    .APP_BLE_SCAN_RESP_DATA        = USER_ADVERTISE_SCAN_RESPONSE_DATA,
    .
    .
  }

我想像这样代表UUID_BASE:

#define UUID_BASE 0xaa, 0x82, 0xe0, 0x12, 0x69, 0xa2,0x4b, 0xe7, 0x93, 0xe4, 0x19, 0xc9, 0x00, 0x00,0x00,0x00

我的问题是,如何将我的UUID_BASE表示以字节为单位转换为字符串表示形式,我可以按原样继续使用它们。

我非常感谢你的帮助。我无法在任何地方找到解决方案。

谢谢!!!

1 个答案:

答案 0 :(得分:1)

就这样写吧

#define UUID_BASE 0xaa, 0x82, 0xe0, 0x12, 0x69, 0xa2, 0x4b, 0xe7, 0x93, 0xe4, 0x19, 0xc9, 0xb2, 0xaf
#define USER_ADVERTISE_SCAN_RESPONSE_DATA {0x10, UUID_BASE, 0x0}

原因是,除了终止\0之外,只要将数据放入数组中,数据就会相同。

此代码

#define UUID_BASE 0xaa, 0x82, 0xe0, 0x12, 0x69, 0xa2, 0x4b, 0xe7, 0x93, 0xe4, 0x19, 0xc9, 0xb2, 0xaf
char dataA[] = {UUID_BASE, 0x0};

完全等同于此代码

#define UUID_BASE_STR "\xaa\x82\xe0\x12\x69\xa2\x4b\xe7\x93\xe4\x19\xc9\xb2\xaf"
char dataB[] = UUID_BASE_STR;

你可以这样测试:

#include <string.h>
#include <stdio.h>

#define UUID_BASE_BYTES 0xaa, 0x82, 0xe0, 0x12, 0x69, 0xa2, 0x4b, 0xe7, 0x93, 0xe4, 0x19, 0xc9, 0xb2, 0xaf
#define UUID_BASE_STR "\xaa\x82\xe0\x12\x69\xa2\x4b\xe7\x93\xe4\x19\xc9\xb2\xaf"

int main() {
    char dataA[] = {UUID_BASE_BYTES, 0x0};
    char dataB[] = UUID_BASE_STR;

    if(strcmp(dataA,dataB) == 0) {
        printf("The strings are equal\n");
    }
    else {
        printf("The strings are not equal\n");
    }
}

这会输出The strings are equal