【发布时间】:2021-03-18 08:16:13
【问题描述】:
我有这个代码:
#include <iostream>
#include <cstdlib>
#include <stdio.h>
int main()
{
std::string napis = "Inhibitor";
int length = napis.length();
char hex[256];
std::cout << "Original: " << napis << '\n';
for (int i = 0; i < length; i++)
{
char buffer[2];
itoa(napis[i], buffer, 16);
hex[2*i] = buffer[0];
hex[2*i+1] = buffer[1];
}
for (int i = 0; i < length * 2 + 1; i++)
{
std::cout << hex[i];
}
}
在所有这些操作之后,我得到了 hex[0] == 0。不知道为什么。我没有在任何地方设置这个值。程序应该将字符串编码为十六进制。
【问题讨论】:
-
将字符串编码为十六进制是什么意思?十六进制的 ASCII 值?
-
是的,不知道怎么形容;/
-
您的
itoa()调用有缓冲区溢出,因为它将输出 2 个十六进制数字和一个空终止符,但您的buffer[]太小了。您根本不需要itoa(),您可以直接对napis字符使用简单的数学运算生成hex字符串。此外,您的hex字符串不是以 null 结尾的。 -
omg 没错,在将缓冲区 [2] 更改为缓冲区 [3] 后它可以工作,我认为 itoa() 将空终止符作为值返回,而不是作为缓冲区 [] 的一部分,谢谢非常。我知道它可以在很多方面做得更好。 Rn 这只是我在玩,所以我可以设置一切,我肯定会改变很多正在进行的事情。
-
您对
hex[0]的期望是什么。 (假设您可能不知道如何准确描述您的目标,因此在这种情况下您可能必须明确说明预期结果。)
标签: c++ arrays string char hex