受信すると、の配列を形成するバイトのストリームを解析していますuint8
。配列の内容は、整数、文字列、または浮動小数点数のいずれかであることが事前にわかっています。必要なのは、データをそれらのタイプに再解釈することだけです。しかし、フロートは私にいくつかの懸念を引き起こしています。
私の質問ですが、次の構造は驚くことなく期待どおりに機能しますか?(メモリエイリアシング、パディング、エンディアンなど)そして、そうでない場合、合理的な限り少ないコードでこれを達成するための最良の方法は何でしょうか?
union BytesToFloat{
float f;
uint8 bytes[4];
}
背景として、このデータはセーブデータに由来するため、データを書き込むコンピューターが、データを読み取るコンピューターと同じではない可能性があります。
編集
エンディアンに関するコメントの1つを読んだ後、この構造と支援機能がより適切であるか、それともエンディアンが問題のままであるか(またはそれ以上に厄介なことがある可能性があります)
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;
}