IsLittleEndian
でフィールドを発見したときはとてもうれしかったBitConverter
です。もちろんそこにあるはずで、好きなエンディアンを指定できるはずだと思いました。さて、私の幸せは長くは続きませんでした。フィールドを設定する方法がないことがわかるまで、しばらく時間を費やしました。フィールドはであり、静的コンストラクターでreadonly
のみ設定されます。true
static BitConverter()
{
IsLittleEndian = true;
}
フィールドが実際にコードで使用されているのは面白いです。たとえば、ToInt32
メソッドの実装は次のようになります。
if (IsLittleEndian)
{
return (((numRef[0] | (numRef[1] << 8)) | (numRef[2] << 0x10)) | (numRef[3] << 0x18));
}
return ((((numRef[0] << 0x18) | (numRef[1] << 0x10)) | (numRef[2] << 8)) | numRef[3]);
ToInt32
そのため、リトルエンディアンとビッグエンディアンの両方を完全に処理できるようです。
私の質問は、FCL に既に実装されている非常に便利なコードがあるのに、それを使用する方法がないのはなぜですか (もちろん、リフレクションをいじり始めない限り)。一部の開発者が締め切りに間に合わず、仕事を中途半端に放置しただけなのでしょうか? そうだとしても、なぜコードは利用できないのに、フィールドは利用できるのでしょうか? これには正当な理由があることを願っています。
私は自分自身を明確にしたい。ビッグエンディアンの値を処理する方法についての解決策は必要ありません。私には解決策があります。解決策は実際に私の質問に示されています。