c - c char 数组到 uint8_t 数组
问题描述
我有一个关于我遇到的交流问题的基本问题。我的输入字符数组将类似于:
'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
笔记:
由于您的要求是获取一个字节数组,您可能会想做类似的事情
uint8_t *arr = (uint8_t*)&res;
但这里有两个警告:
1) I 是一个严格的别名规则uint8_t
违规(您可以通过替换来以某种方式解决它char
)
2) 返回字节的顺序将是特定于实现的(依赖于字节序),因此不可移植。另请注意,结果是unsigned long long
,因此您可能会在数组的开头或结尾获得额外的填充零。
推荐阅读
- winforms - 具有完全信任过程的 UWP 包的商店版本表单应用程序在启动时不断崩溃
- python - 我们可以跳过 for 循环的“y-1”次迭代并使用 PDB 运行“y”次迭代吗?
- jquery - 悬停时背景图像更改
- typescript - VueJS字符串插值可以访问TS对象的私有属性
- html - 在没有水平滚动条且没有溢出的情况下,使 div 比其父级更宽:隐藏?
- angular - 为什么以角度登录后导航不起作用
- react-native - 如何在 react-native 的材料底部选项卡中增加一个图标和另一个图标之间的空间
- scala - 无法使用 SparkSql 插入值
- python-3.x - Python Selenium 没有打开链接
- r - 拆分训练/测试集 R