首页 > 解决方案 > 如何获取数据类型为 uint8_t 变量的字符串字符并将它们用作十六进制变量?

问题描述

我有一个 uint8_t 变量,其中包含 4 个十六进制变量的子字符串。例子:

uint8_t String[10] = "00AABBCC";

我想将这 4 个十六进制变量转换为不同的十六进制值:

uint8_t Data_Byte[4];
Data_Byte[0]=0x00;
Data_Byte[1]=0xAA;
Data_Byte[2]=0xBB;
Data_Byte[3]=0xCC;

如何将这 4 个子字符串放入 4 个不同的 uint8_t 变量中?

标签: c

解决方案


您可以使用sscanf将字符串中的每个两个字符对解析为一个数字:

uint8_t arr[strlen(String) / 2];
for (int i = 0; i < strlen(String); i += 2) {
    sscanf(String + i, "%2hhx", &arr[i / 2]);
}

如果你在一个sscanf支持有限的系统上开发,你可以使用这样的东西:

for (int i = 0; i < strlen(String); i += 2) {
    uint8_t val1 = isdigit(String[i]) ? (String[i] - '0') : (String[i] - 'A' + 10);
    uint8_t val2 = isdigit(String[i + 1]) ? (String[i + 1] - '0') : (String[i + 1] - 'A' + 10);

    arr[i / 2] = val1 << 4 | val2;
}

推荐阅读