今天看公司代码,遇到一个数组指针强制转换成结构体指针的地方,就在想这样做的结果会是什么,和别人讨论了一下。得到结果是,这样做是让结构体按照自己的属性重新读取数组中的数据,
字节对齐
如果结构体中所有属性所占字节和数组的类型所占字节一样(如果数组类型是16位的,属性也是16位的),那就直接按照属性的顺序,将数组中的数据依次读取出来(是读取,不是复制,因为是指针强制转换)
字节不对齐
如果结构体属性所占字节数和数组的类型不一样,那样数据就会乱,结构体会按照属性的类型依次读取类型长度的数据,然后数据就会乱了
大小端
这个自然也是很有影响的,如果写的时候默认小端模式,而芯片中确实大端模式,那样数据就会直接读成倒的了,如数组 { 0x1234,0x5678 } ,强制转换成结构体指针后,假设默认是小端模式,作者认为结构体中两个数据应该为{ data1= 0x1234 , data2=0x5678 },而芯片实际是大端模式,那CPU读取的数据就是{ data1=0x7856, data2=0x3412 }