我想复制 unit64_t 数据到 uint8_t 数组使用 memcpy 但它是按相反的顺序复制的。
unit64_t
uint8_t
memcpy
#include<stdlib.h> #include<stdint.h> #include<stdio.h> #include<inttypes.h> void create(uint8_t * pu8Data, uint64_t Val) { uint8_t *tempBuffer = pu8Data; if( NULL != tempBuffer ) { memcpy(tempBuffer,(const void *)&Val,8); } } int main() { uint8_t *p = malloc(sizeof(uint8_t)*80); uint64_t val = 0x12345678; create(p,val); int i =0; for ( i = 0; i < 4; i++) { printf("buffer: %d, 0x%02X\n", i, p[i]); } }
但当我打印时,它是像下面这样复制的。
buffer: 0, 0x78 buffer: 1, 0x56 buffer: 2, 0x34 buffer: 3, 0x12
我所期待的是。
buffer: 0, 0x12 buffer: 1, 0x34 buffer: 2, 0x56 buffer: 3, 0x78
uint64_t val = 0x12345678; 和其他整数一样,它是用CPU的endianess表示的,在本例中显然是小endian。学习环境。
uint64_t val = 0x12345678;
要获得预期的结果而不考虑CPU,您必须执行以下操作:
uint8_t val[] = {0x12, 0x34, 0x56, 0x78};
0x12345678 是32位数字,而不是64位。
0x12345678