c - C 编程将十六进制的字符串表示形式转换为十六进制
问题描述
我对 C 相当陌生。我想将十六进制数的字符串表示形式转换为实际的十六进制数?
#include <stdio.h>
int main()
{
char buf[8] = "410C0000";
printf("%s\n",buf);
return 0;
}
我想分解字符串并将其转换为 4 个单独的十六进制数字。我可以进一步处理计算:
0x41 0x0C 0x00 0x00
解决方案
您可以使用,它是从字符串读取而不是从标准输入或文件读取sscanf
的变体。scanf
格式说明符%X
指定将输入视为十六进制数,%02X
另外表示要准确读取两位数字,并%02hhX
另外定义将结果存储到单个字节中(即一个unsigned char
,而不是可能的 64 位整数值)。
代码如下所示:
int main()
{
char buf[8] = "410C0000";
unsigned char h0=0, h1=0, h2=0, h3=0;
sscanf(buf+6, "%02hhX", &h0);
sscanf(buf+4, "%02hhX", &h1);
sscanf(buf+2, "%02hhX", &h2);
sscanf(buf+0, "%02hhX", &h3);
printf("0x%02X 0x%02X 0x%02X 0x%02X\n",h3, h2, h1, h0);
return 0;
}
输出:
0x41 0x0C 0x00 0x00
顺便说一句:buf
- 大小为 8 - 将不包含终止的字符串'\0'
,因此您将无法在printf
. char buf[9]
如果您也想用作字符串,请编写buf
,例如在编写printf("%s\n",buf)
.
推荐阅读
- python - 如何通过 tcl 访问 Menu Tkinter?
- python - 熊猫排序但保持在组中
- flutter - 如何进入小部件内部,使其自身的大小被 FittedBox 缩小
- jupyter-notebook - jupyter笔记本中的交叉引用
- javascript - 录音机脚本适用于除 Edge 浏览器以外的大多数浏览器
- r - 将 R 对象上传到 Azure Blob 容器
- angular - ionic3 在搜索地址时设置离子输入超时
- python - 在使用“queryset”而不是使用“def get_queryset(self)”时检索“self”值的替代方法
- arrays - SwiftUI - 如何从 Identifiable 结构中读取字符串数组
- css - CSS滑动与粘性顶部菜单栏重叠