私はストリームAPIを書いています。BigEndian/LittleEndianやunsigned vs signed変換を扱う必要がある多くのものを使用しています。私は動作する次のコードを持っています。しかし、私はそれが何をしているか知りたい、いくつかのELI5(私は5のように説明してください)できますか?安全ではない変換を浮動小数点数にするには、*(浮動小数点数)(&num)は何ですか?
int num = ReadInt();
return *(float*) (&num);
public int ReadInt()
{
return
(_memoryStream.ReadByte() << 0x18) |
(_memoryStream.ReadByte() << 0x10) |
(_memoryStream.ReadByte() << 0x08) |
_memoryStream.ReadByte();
}
ここで、私はReadIntと同じように、LittleEndianをBigEndianに変えています。私の頭を包み込むことができない部分は、*(float*)(&num)
です。
何らかのメモリシフトを行っていると推測していますが、それは100%ではありません。
場合。この手法では危険性は、たとえば、明らかにあり私は最終的にこれらを安全に書き直す方法を模索するつもりですが、今はすべてのユニットテストが合格しており、何をしているのか分かります。ありがとうございました! – emalamisura
さらに調べると、.NET用のBitConverterクラスに組み込まれているのと同じことが行われているようです。 https://referencesource.microsoft.com/#mscorlib/system/bitconverter.cs,8640d8adfffb155b – emalamisura