数据存储:大端模式和小端模式

不同的CPU内核可能有不同的数据存储方式,具体表示为可以为大端存储和小端存储。
可以用如下命令判断大小端:

echo -n I | od -o | head -n1 | cut -f2 -d" " | cut -c6

1为小端模式,0为大端模式。

在一段char数组中memcpy一段十六进制输入,可以通过先转换为2进制,然后通过对应结构体中的元素的字节长度确定对应的十进制数据。此时,就需要考虑大端小端问题,大端存储和小端存储解析出来的十进制数据是不同的。

一个大端和小端不同模式下打印不同数据的例子:

#include 
#include 
struct Person{
    int age;
    int sex;
};
int main(){
    struct Person *someone;
    char *pData ;
    //要注意给定义的指针分配指向的内存块,不然就会变成野指针。
    someone = (struct Person*)malloc(sizeof(struct Person));  
    char testData[] = {0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00};
    pData = (char*)someone;
    memcpy(pData,testData,sizeof(testData));
    printf("年龄为%d\n,性别为:%d\n",someone->age,someone->sex);
    return 0;
}

打印如下:
在这里插入图片描述

#include 
#include 
struct Person{
    int age;
    int sex;
};
int main(){
    struct Person *someone;
    char *pData ;
    someone = (struct Person*)malloc(sizeof(struct Person));
    char testData[] = {0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01};
    pData = (char*)someone;
    memcpy(pData,testData,sizeof(testData));
    printf("年龄为%d\n,性别为:%d\n",someone->age,someone->sex);
    return 0;
}

打印如下:
在这里插入图片描述

你可能感兴趣的:(#,c语言,c语言)