C 将#定义从字节转换为字符串

C 将#定义从字节转换为字符串,c,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

我正在使用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,
    .
    .
  }
#define UUID_BASE 0xaa, 0x82, 0xe0, 0x12, 0x69, 0xa2,0x4b, 0xe7, 0x93, 0xe4, 0x19, 0xc9, 0x00, 0x00,0x00,0x00
#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");
    }
}
我想这样表示UUID_基:

#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,
    .
    .
  }
#define UUID_BASE 0xaa, 0x82, 0xe0, 0x12, 0x69, 0xa2,0x4b, 0xe7, 0x93, 0xe4, 0x19, 0xc9, 0x00, 0x00,0x00,0x00
#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");
    }
}
我的问题是,如何将UUID_BASE的字节表示转换为字符串表示,这样我就可以继续使用它们的代码了

我非常感谢你的帮助。我到处都找不到解决办法


谢谢你

就这样写吧

#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;
您可以这样测试它:

#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,
    .
    .
  }
#define UUID_BASE 0xaa, 0x82, 0xe0, 0x12, 0x69, 0xa2,0x4b, 0xe7, 0x93, 0xe4, 0x19, 0xc9, 0x00, 0x00,0x00,0x00
#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");
    }
}
#包括
#包括
#定义UUID_基本字节0xaa、0x82、0xe0、0x12、0x69、0xa2、0x4b、0xe7、0x93、0xe4、0x19、0xc9、0xb2、0xaf
#定义UUID_BASE_STR“\xaa\x82\xe0\x12\x69\xa2\x4b\xe7\x93\xe4\x19\xc9\xb2\xaf”
int main(){
char dataA[]={UUID_BASE_字节,0x0};
char dataB[]=UUID_BASE_STR;
if(strcmp(dataA,dataB)==0){
printf(“字符串相等\n”);
}
否则{
printf(“字符串不相等\n”);
}
}

这将输出
字符串相等

如果没有任何for循环或类似选项,我看不到直接执行此操作的选项。应该如何执行,取决于您将如何使用它。请用代码解释你想做什么。还有,为什么数据字节不同?这和你的问题有关吗?您的问题不清楚,请澄清。您为什么在这两个示例中有不同的数据?我正在使用一些用于ble连接的项目示例,在这段代码中,它们使用“字符串表示法”然后把它放在扫描响应数据上,比如://scan response data#define USER(用户)define(广告)scan(响应)data(“\x11”\ADV(类型)COMPLETE(列表)128位(服务(id)UUID)UUID(基)我需要将其转换为它们的表示形式,以便将其放入扫描响应数据中。@user694733显然,我没有阐明我的观点。我想说的是,只要你使用这些定义来填充数组,你就不必担心差异,重复数据只是为了表明这些方法实际上是平等的。谢谢,但这不是我想要解决的问题。我稍微改变了我的问题。“我希望,现在一切都清楚了。”“安东尼奥,也许这就是你问的。”。我猜您实际上不需要预处理器字符串,而是希望将其分配给数组。请看我的编辑!否则,请提供
struct data\u struct
@Antonio的定义。如果这不能回答您的问题,您的问题非常不清楚。您已经介绍了两种表示相同数据的方法。一个是C字符串,一个是字节数组。这些是在编译时定义的。您可以使用带有字符串的版本,也可以使用带有koalo提供给您的字节数组的版本。如果您想将字节数组转换为字符串,您可以自己手动转换并将其输入源代码。如果您需要在运行时进行这种转换,您需要在问题中非常清楚地说明这一点。(但是,在运行时这样做并没有真正意义)