2010-11-17 83 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