首页 > 解决方案 > c char 数组到 uint8_t 数组

问题描述

我有一个关于我遇到的交流问题的基本问题。我的输入字符数组将类似于:

'DABC95C1' 

我想用它制作一个 uint8_t 数组

0xDA 0xBC 0x95 0xC1

我可以轻松访问每个字符,但我不知道如何形成0xDA。c中有函数还是我可以直接转换它?

标签: ccharuint8t

解决方案


使用该strtoull函数将字符串转换为给定基数的数字。然后只需移出所需的字节。如:

#include <stdio.h>
#include <stdlib.h>

int main(void) {

    unsigned long long res = strtoull("DABC95C1", NULL, 16);

    printf("%hhx, %hhx, %hhx, %hhx",
        (unsigned char)res,
        (unsigned char)((res >> 8)   &  0xFF),
        (unsigned char)((res >> 16)  &  0xFF),
        (unsigned char)((res >> 24)  &  0xFF)
    );

    return 0;
}

结果:

c1, 95, bc, da

演示

笔记:

由于您的要求是获取一个字节数组,您可能会想做类似的事情

uint8_t *arr = (uint8_t*)&res;

但这里有两个警告:

1) I 是一个严格的别名规则uint8_t违规(您可以通过替换来以某种方式解决它char
2) 返回字节的顺序将是特定于实现的(依赖于字节序),因此不可移植。另请注意,结果是unsigned long long,因此您可能会在数组的开头或结尾获得额外的填充零。


推荐阅读