我想將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時,它是空白的。請澄清。
我想將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時,它是空白的。請澄清。
您正在將整數的字節表示形式複製到char數組中。然後,您要求printf
將此數組解釋爲空終止字符串:str1[0]
爲零,您實際上正在打印一個空字符串(我在此跳過endianness談話)。
你期望什麼?顯然,如果你想打印整數i
的文本表示,你應該使用printf("%d", i)
。
什麼是你的本意嗎?現在你將任意的字節值放到char數組中,但是將它們解釋爲一個字符串,因爲它發生的第一個字節可能是零(null),因此你的打印沒有任何內容,但很可能很多字符都是不可打印,所以printf是用來檢查副本是否工作的錯誤工具。
因此,無論是:循環訪問數組並打印每個字節的數值,%0xd可能對此有用,或者如果您的意圖實際上是創建int的字符串表示形式,那麼您需要更大的緩衝區,併爲空終止符空間。
感謝您的澄清:) – arun 2010-11-17 08:33:13
嘗試
printf("%02X %02X %02X %02X\n", str1[0], str1[1], str1[2], str1[3]);
代替。
整數1的二進制表示可能包含前導NUL,因此當前的printf語句會比您想要的更早終止。
謝謝。我現在得到了:) – arun 2010-11-17 08:39:24
所以,這意味着,價值在變量中。這只是我沒有正確打印。這就是爲什麼它不顯示。是對的嗎? – arun 2010-11-17 08:27:25
還有一個疑問,如果我將它移動到另一個存儲位置,確切數據(整個十六進制值)是否會移動? – arun 2010-11-17 08:27:59