我正在尝试使用以下方法将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]);
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我打印时,它正在复制如下.
buffer: 0, 0x78
buffer: 1, 0x56
buffer: 2, 0x34
buffer: 3, 0x12
Run Code Online (Sandbox Code Playgroud)
我所期待的是.
buffer: 0, 0x12
buffer: 1, 0x34
buffer: 2, 0x56
buffer: 3, 0x78
Run Code Online (Sandbox Code Playgroud)
uint64_t val = 0x12345678;
像任何其他整数一样,在CPU的endianess中表示,在这种情况下显然是小端.研究endianess.
无论CPU如何获得预期结果,您都必须:
uint8_t val[] = {0x12, 0x34, 0x56, 0x78};
Run Code Online (Sandbox Code Playgroud)
另请注意,这0x12345678
是一个32位数字,而不是64位.