2017-04-08 85 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()函数。 –

相关问题