c - 如何获取数据类型为 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 变量中?
解决方案
您可以使用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;
}
推荐阅读
- python - 如何在 PyCharm 中设置远程 docker compose 解释器
- racket - How to access syntax-class attributes in `~optional` that contains ellipsis?
- javascript - 如何让jquery对话框一键关闭
- r - 如何四舍五入到下一个 10?
- symfony - Symfony Voters 仅用于检查用户权限?
- haskell - 累加器版本的递归
- c++ - 我可以多次使用相同的 std::promise 和 std::future 对象吗?
- python - 关于python3列表删除的问题。为什么我不能删除偶数和奇数?
- javascript - 如何在电子应用程序中访问相机/网络摄像头?
- powerbi - 在 DAX/Power BI 中对值进行排序