我在输入中有一个 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
给了你一个字符数组,其中每个字符都在 0x30 到 0x39 的范围内。您希望将它们扩展为两个字符“3”和“0”、“3”和“1”等。
您将源中的每个字符扩展为输出中的两个字符,这意味着您不能使用与源缓冲区相同的目标缓冲区——您会在处理它们之前覆盖源缓冲区中的值。如果您需要 buffer
中的结果,您可能希望将第一个 sprintf
放入一个单独的 char 数组中。在您的循环中,将 printf
更改为 sprintf
到 buffer
中的索引,每次循环将索引递增 2。 (两个因为那样你会用第二次迭代的 sprintf
输出覆盖第一次迭代的字符串终止符,这将包括一个新的字符串终止符。最后一个中的 sprintf
循环的迭代将为您终止字符串。)
您没有提到您应该处理的最长输入,或者您选择数组长度的原因。如果您接受的输入对于您的缓冲区而言太长(并且不要忘记在最后一个字符之后考虑空终止符的空间),则存在缓冲区溢出的危险。
关于c - 如何将十六进制 ASCII 值保存到 C 中的数组(缓冲区)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52938333/