gpt4 book ai didi

c char 数组到 uint8_t 数组

转载 作者:太空宇宙 更新时间:2023-11-04 00:58:24 25 4
gpt4 key购买 nike

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

'DABC95C1' 

我想用它制作一个 uint8_t 数组

0xDA 0xBC 0x95 0xC1

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

最佳答案

使用 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

Demo

注意事项:

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

uint8_t *arr = (uint8_t*)&res;

但是这里有两个警告:

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

关于c char 数组到 uint8_t 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50568238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com