#include <iostream>
using namespace std;
int main()
{
char buffer[8];
int field=534;
memcpy(buffer,&field,sizeof(field));
cout<<buffer<<endl;
return 0;
}
这将返回一个空缓冲区。为什么呢?
基本上寻找sprintf的替代方法,将int转换为char缓冲区。
Itoa不在。
思考?更好的选择?
答案 0 :(得分:4)
您必须使用sprintf或itoa将二进制int转换为ascii字符串。
如果ints和char数组是完全不同的,那么表示可以包含值为零的字节,但字符串只能将其作为最后一个字节。
例如
取0 - 在int中它由4个字节表示,值为0而while)因为字符串具有48和0的前两个字节所以没有简单的强制转换将为此设置
答案 1 :(得分:3)
我认为memcpy已成功。 Memcopy将复制字节而不是将字节转换为字符(如您所愿)。您无法看到因为534碰巧产生两个不可打印的字符。尝试使用18505,它会打印一条消息。不是你想要的。
如果itoa不可用,那么你总是可以自己编写。事实上,这是一个常见的计算机科学作业问题。要做到这一点,你需要从整数中分离每个数字(提示整数除法将截断 - 正是我们想要的!)并且你需要将每个数字从0到9之间的整数转换成它的ascii表示。
这有足够的提示,但如果您需要更多帮助,请随时提问。
答案 2 :(得分:2)
如果itoa可用,你可以使用它,这个函数不是C ++的一部分,但有些编译器支持。
或者你可以这样做:
std::stringstream out;
out << field;
strcpy(buffer,out.str().c_str());
答案 3 :(得分:2)
你也可以使用istringstream:
istringstream ss(field);
ss>>buffer;
答案 4 :(得分:1)
由于char的编码和事实'9',你的方法不会起作用!= 9.但为什么不建立你自己的itoa?它非常简单(提示:x - '0'将'0' - '9'变为0 - 9),或者只是从任何一个开源libstdc中复制itoa变量的源