c - 如何将十六进制 ASCII 值保存到 C 中的数组(缓冲区)?

标签 c type-conversion hex buffer ascii

我在输入中有一个 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 更改为 sprintfbuffer 中的索引,每次循环将索引递增 2。 (两个因为那样你会用第二次迭代的 sprintf 输出覆盖第一次迭代的字符串终止符,这将包括一个新的字符串终止符。最后一个中的 sprintf循环的迭代将为您终止字符串。)

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

关于c - 如何将十六进制 ASCII 值保存到 C 中的数组(缓冲区)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52938333/

相关文章:

string - 可以在Go中使用`string()`将字节转换为空字符串吗?

C++ 定义到基类的转换

python - 是否有内置函数可以执行 numpy.fromstring 的相反操作?

c - 在C中将整数显示为十六进制

在C中将十六进制转换为十进制

.net - 在 VB.NET 中将十六进制代码点转换为 Unicode 字符

c - 调用的参数太少

c - 使用星星打印三角形

C 整数正在变成大数

谁能帮助我理解这个特殊的 union 例子?