最近在写一个读取文件,得到里面存储的事例,进行解压缩然后转换图片进行存盘的工作,文件中存储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