2010-11-17 34 views
0

我想将int的内存值复制到char缓冲区中。代码如下所示,memcpy()将整数值复制到char缓冲区

#define CPYINT(a, b) memcpy(a, &b, 4) 
............ 

char str1[4]; 
int i = 1; 
CPYINT(str1, i); 
printf("%s",s); 

........... 

当我打印str1时,它是空白的。请澄清。

回答

7

您正在将整数的字节表示形式复制到char数组中。然后,您要求printf将此数组解释为空终止字符串:str1[0]为零,您实际上正在打印一个空字符串(我在此跳过endianness谈话)。

你期望什么?显然,如果你想打印整数i的文本表示,你应该使用printf("%d", i)

+0

所以,这意味着,价值在变量中。这只是我没有正确打印。这就是为什么它不显示。是对的吗? – arun 2010-11-17 08:27:25

+0

还有一个疑问,如果我将它移动到另一个存储位置,确切数据(整个十六进制值)是否会移动? – arun 2010-11-17 08:27:59

0

也许你需要转换intger为char *以这种方式土特产品可以使用itoa功能 link text

+0

谢谢。我不是想转换,而是复制内存值。 – arun 2010-11-17 08:29:46

1

什么是你的本意吗?现在你将任意的字节值放到char数组中,但是将它们解释为一个字符串,因为它发生的第一个字节可能是零(null),因此你的打印没有任何内容,但很可能很多字符都是不可打印,所以printf是用来检查副本是否工作的错误工具。

因此,无论是:循环访问数组并打印每个字节的数值,%0xd可能对此有用,或者如果您的意图实际上是创建int的字符串表示形式,那么您需要更大的缓冲区,并为空终止符空间。

+0

感谢您的澄清:) – arun 2010-11-17 08:33:13

2

尝试

printf("%02X %02X %02X %02X\n", str1[0], str1[1], str1[2], str1[3]); 

代替。

整数1的二进制表示可能包含前导NUL,因此当前的printf语句会比您想要的更早终止。

+0

谢谢。我现在得到了:) – arun 2010-11-17 08:39:24