首页 > 解决方案 > 如何将十六进制 ASCII 值保存到 C 中的数组(缓冲区)中?

问题描述

我在输入中有一个 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

标签: ctype-conversionhexbufferascii

解决方案


第一个sprintf为您提供了一个 char 数组,其中每个字符的范围为 0x30 到 0x39。您希望将它们扩展到两个字符“3”和“0”、“3”和“1”等。

您将源中的每个字符扩展为输出中的两个字符,这意味着您不能使用与源缓冲区相同的目标缓冲区——您将在处理源缓冲区之前覆盖源缓冲区中的值。sprintf如果您需要buffer. 在您的循环中,将printfa更改sprintf为 inbuffer的索引,每个循环将您的索引增加两个。(通过两个,因为这样您将用第二次迭代的sprintf输出覆盖第一次迭代的字符串终止符,其中将包括一个新的字符串终止符。sprintf循环的最后一次迭代中的 将为您终止字符串。)

你没有提到你应该处理的最长输入,或者你为什么选择你所做的数组长度。如果您接受对缓冲区来说太长的输入,则此处存在缓冲区溢出的危险(并且不要忘记在最后一个字符之后为空终止考虑空间。)


推荐阅读