我正在解析一个字节流,一旦接收到它,就会形成一个uint8
. 事先知道数组内容应该是什么,可以是整数、字符串或浮点数。所需要的只是将数据重新解释为这些类型。不过,浮动引起了我的一些担忧。
我的问题是,以下结构是否会按预期工作而不会遇到任何意外?(内存别名、填充、字节序等)如果没有,用尽可能少的代码实现这一目标的最佳方法是什么?
union BytesToFloat{
float f;
uint8 bytes[4];
}
作为背景,此数据来源于保存数据,因此写入数据的计算机可能与读取数据的计算机不同。
编辑
在阅读了关于字节序的评论之一之后,这种结构和帮助功能是否更合适,或者字节序仍然是一个问题(或者除此之外还有其他问题)
union IntToFloat{
float f;
uint32 i;
};
uint32 CharToLong(unsigned char * c){
uint32 val = c[0];
val <<= 8;
val |= c[1];
val <<= 8;
val |= c[2];
val <<= 8;
val |= c[3];
return val;
}