将8字节值中的每个字节存储在数组中

时间:2017-04-08 22:42:30

标签: c arrays

我有一大块字节称为内存,uint64_t值称为valA。我希望valA中的每个字节都存储在内存中的一个位置(内存中的每个位置都保存一个字节)。我从内存开始的位置是3832.

这是我到目前为止所编码的内容:

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中的原始数字。有什么建议吗?

1 个答案:

答案 0 :(得分: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

请注意,字节反向排序以匹配演示系统上的排序。