数组强制转换成结构体指针
2017-09-20 21:35
387 查看
今天看公司代码,遇到一个数组指针强制转换成结构体指针的地方,就在想这样做的结果会是什么,和别人讨论了一下。得到结果是,这样做是让结构体按照自己的属性重新读取数组中的数据,
字节对齐
如果结构体中所有属性所占字节和数组的类型所占字节一样(如果数组类型是16位的,属性也是16位的),那就直接按照属性的顺序,将数组中的数据依次读取出来(是读取,不是复制,因为是指针强制转换)
字节不对齐
如果结构体属性所占字节数和数组的类型不一样,那样数据就会乱,结构体会按照属性的类型依次读取类型长度的数据,然后数据就会乱了
大小端
这个自然也是很有影响的,如果写的时候默认小端模式,而芯片中确实大端模式,那样数据就会直接读成倒的了,如数组 { 0x1234,0x5678 } ,强制转换成结构体指针后,假设默认是小端模式,作者认为结构体中两个数据应该为{ data1= 0x1234 , data2=0x5678 },而芯片实际是大端模式,那CPU读取的数据就是{ data1=0x7856, data2=0x3412 }
字节对齐
如果结构体中所有属性所占字节和数组的类型所占字节一样(如果数组类型是16位的,属性也是16位的),那就直接按照属性的顺序,将数组中的数据依次读取出来(是读取,不是复制,因为是指针强制转换)
字节不对齐
如果结构体属性所占字节数和数组的类型不一样,那样数据就会乱,结构体会按照属性的类型依次读取类型长度的数据,然后数据就会乱了
大小端
这个自然也是很有影响的,如果写的时候默认小端模式,而芯片中确实大端模式,那样数据就会直接读成倒的了,如数组 { 0x1234,0x5678 } ,强制转换成结构体指针后,假设默认是小端模式,作者认为结构体中两个数据应该为{ data1= 0x1234 , data2=0x5678 },而芯片实际是大端模式,那CPU读取的数据就是{ data1=0x7856, data2=0x3412 }
相关文章推荐
- 数组指针强制转换成结构体指针
- 数组强制转换成结构体指针,结构体内部指针的指向问题
- 把一个地址强制转换成结构体指针的作用分析
- C++带有指针数组的结构体转换为C#可用的结构体
- C语言中不同类型的结构体的指针间可以强制转换
- C函数,函数指针,函数类型,函数数组,函数强制转换使用
- 强制转换为结构体指针的例程
- 出于数据保护的结构体指针强制转换和字段截断
- 结构体相关的计算(结构体指针加一以及强制类型转换后加一)
- 强制类型(结构体)转换NULL-----C指针的黑科技
- char*指针强制转换成一个指向结构体的指针
- 数据手动输入c++ 结构体练习 结构体重的char数组指针
- 数据的显式隐式转换以及枚举、结构体和数组
- C语言之对队列、结构体、指针、数组的理解
- 指针,数组转换漫谈
- 动态数组和指针转换(DELPHI)
- dynamic_cast指针强制转换
- struct 结构体中 数组和指针
- 数组,指针,结构体的使用
- C语言 指向结构体数组的指针