【发布时间】:2019-03-27 01:25:06
【问题描述】:
我在输入中有一个 int 值,我想将它作为 ASCII 的十六进制表示形式保存到缓冲区/数组中。 我知道如何以十六进制形式打印它,但我怎样才能将它这样保存到缓冲区?
这是我写的代码:
int a = 98765;
char buffer[20];
m = sprintf(buffer, "%d", a);
printf("ASCII value in hex: ");
for(int i=0; buffer[i]!='\0'; i++)
{
printf("%02X", buffer[i]);
}
例如如果 a=123 我想得到 313233
【问题讨论】:
-
为什么首先用十进制sprintf它?为什么不直接使用 sprintf(buffer, "%02X".a)?
-
@LeeDanielCrocker 谢谢!我忘了补充说我想获得十六进制的 ASCII 值,而不是整数,所以例如对于 a=123456 我想获得 313233343536
-
我很困惑。从您的示例中,您的代码看起来应该按原样工作。那么,对于
123,如果你没有得到313233的输出,那么你得到的是什么?我刚刚下载并测试了你的代码,它可以工作,所以 double 很困惑 :-) -
我只是重读了你的问题,所以如果你想 save 你的
printf打印到缓冲区中,你需要一个 second 缓冲区(例如char hexbuffer[50])。现在,将您的printf替换为:sprintf(&hexbuffer[i * 2],"%02X",buffer[i])。您不能在单个缓冲区中执行此操作,因为您输出的字符数是原来的两倍 -
好奇为什么
char buffer[20];中有20个?注意:如果a是 64 位,sprintf(buffer, "%d", a);可能需要 21。
标签: c type-conversion hex buffer ascii