char型数组转换为Int(指针的规范使用)

本文介绍了在处理文件数据时如何从char型数组正确转换为Int,强调了直接指针转换的风险,并提供了相对安全的转换方法,涉及到内存存储的大小端问题。在x86架构的小端模式下,通过逐字节解析并组合来获取正确的32位整数值。
摘要由CSDN通过智能技术生成

最近在写一个读取文件,得到里面存储的事例,进行解压缩然后转换图片进行存盘的工作,文件中存储event的顺序如下:


可以看到数据的长度都存到了m_datasize的这四个字节里,因此如果要读到之后数据的内容,那么就需要首先读到m_datasize里的内容,刚开始我是这样做的

char * event_head = new event_head [8];

uint32_t    *m_trig;

uint32_t    *m_datasize;

m_trig = (uint32_t*) event_head;

m_datasize = m_trig +1;

这样做就是想强制把不同类型的指针进行强制转换,但是这样做其实有风险,有时候会导致指针指向的区域不确定,由此带来意向不到的结果。

所以应该尽量避免这样的做法。

所以我采用了以下的方法,虽然看上去比较繁琐和麻烦,但是相对来说比较安全,但在这里又涉及到了内存存储大小端的问题

1、小端模式:内存的低地址存数据的低位,内存的高地址存数据的高位。
2、大端模式:内存的低位存数据的高位,内存的高地址存数据的低位。 

一般来说x86结构的计算机使用的都是小端模式,因此这里的转换应该用小端模式来进行考虑

char *event_head = new char[8]

uint32_t  m_trig

u

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值