如何处理 C 中的字节顺序

How to handle endianness in C

我正在尝试使用 memcpyunit64_t 数据复制到 uint8_t 数组,如下所示。 但是是倒序复制。

#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 的字节序表示,在本例中显然是小字节序。研究字节顺序。

无论 CPU 如何获得预期结果,您必须执行以下操作:

uint8_t val[] = {0x12, 0x34, 0x56, 0x78};

另请注意,0x12345678 是 32 位数字,而不是 64 位数字。