将16位整数复制到两个字节的数组

时间:2016-11-15 11:31:05

标签: c++ arrays memory endianness

我想知道为什么当我将16位数字复制到一个双字节数组时,它只会复制到数组的第一个索引。 我的代码如下:

#include <iostream>
#include <stdint.h>
#include <stdio.h>
#include <cstring>



using namespace std;


int main(){
    uint16_t my_num = 1; // This should be 0000 0000 0000 0001, right?
    unsigned char my_arr[2]; // This should hold 16 bits, right?

    memcpy(my_arr, &my_num, sizeof(my_num)); // This should make my_arr = {00000000, 00000001}, right?

        printf("%x ", my_arr[0]);
        printf("%x ", my_arr[1]);
        cout << endl;
        // "1 0" is printed out


        return 0;
}

提前致谢。

1 个答案:

答案 0 :(得分:7)

这是因为您平台的endianness。多字节uint16_t的字节存储在最低字节优先的地址空间中。您可以通过尝试使用大于256的数字的相同程序来查看正在进行的操作:

uint16_t my_num = 0xABCD;

结果将在第一个字节中显示0xCD,在第二个字节中显示0xAB

您可以使用hton/ntoh family中的函数强制使用特定的字节序。