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

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

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

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

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

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

#include <stdio.h>
#include <string.h>
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 <stdio.h>
#include <string.h>
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;
}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值