2017-04-08 147 views
-1

我有一個稱爲內存的大字節數組和一個名爲valAuint64_t值。我希望valA中的每個字節都存儲在內存中的一個位置(內存中的每個位置保存一個字節)。在內存中的位置,我從開始是3832將8字節值的每個字節存儲在數組中

這是我到目前爲止編碼:

uint64_t valA = 81985529216486895; 
memory[3832] = valA; 

當我打印出內存中的每個位置:

printf("number in memory - %d%d%d%d%d%d%d%d", 
     memory[valE+0], memory[valE+1], memory[valE+2], memory[valE+3], 
     memory[valE+4], memory[valE+5], memory[valE+6], memory[valE+7]); 

的輸出是「內存中的數字 - 2390000000」。我希望輸出是存儲在valA中的原始數字。有什麼建議麼?

+0

「內存」你的意思是「內存」,或者你的意思是一些任意數組稱爲內存? –

+0

任意數組稱爲內存 –

+0

一次輸出一個字節將不允許您在'valA'中重新生成十進制數。如果您將'valA'中的數字顯示爲十六進制,則可以將這些字節以十六進制打印出來,並可以重新創建原始數字。你沒有顯示'valA'中的數據在'memory'中的任何地方是可用的;你沒有顯示如何定義「內存」。目前,你的問題是無法回答的。 (請注意系統佈局如何更容易讀取'printf()'語句。)請閱讀如何創建MCVE([MCVE])。 –

回答

1

我所要的輸出是存儲在valA

它是不會與小數輸出工作,因爲十進制表示不會在字節的邊界打破了原來的號碼。你可以把它用十六進制的工作,雖然:

long long unsigned int valA = 81985529216486895LL; 
uint8_t memory[5000]; 
uint32_t valE = 3832; 
memcpy(&memory[valE], &valA, sizeof(valA)); 
printf(
    "%02x%02x%02x%02x%02x%02x%02x%02x\n" 
, memory[valE+7] 
, memory[valE+6] 
, memory[valE+5] 
, memory[valE+4] 
, memory[valE+3] 
, memory[valE+2] 
, memory[valE+1] 
, memory[valE+0] 
); 

Demo

注意,字節反向排序以匹配演示系統中的順序。

+0

謝謝!我不知道memcpy()函數。 –

相關問題