私はこの4バイトを持っています:0x41 0xCC 0xB7 0xCF そして私は25.5897503の番号を見つけなければなりません。 WINDEVで4バイトから10進数 - C#Windevから
、サンプルが転送()関数を使用していますが、私はC#で
を同等見つけることができないあなたには、いくつかの兆候で私を助けてもらえますか?
ありがとうございました
私はこの4バイトを持っています:0x41 0xCC 0xB7 0xCF そして私は25.5897503の番号を見つけなければなりません。 WINDEVで4バイトから10進数 - C#Windevから
、サンプルが転送()関数を使用していますが、私はC#で
を同等見つけることができないあなたには、いくつかの兆候で私を助けてもらえますか?
ありがとうございました
精度が必要です。Single
だから、BitConverter
クラスでToSingle
メソッドを使用します。
byte[] array = new byte[] {0x41, 0xCC, 0xB7, 0xCF};
float value = BitConverter.ToSingle(array, 0);
は、しかしリトル/ビッグエンディアンに注意してください。それが期待通りに動作しない場合は、最初の配列を逆にしてみてください。
byte[] array = new byte[] {0x41, 0xCC, 0xB7, 0xCF};
Array.Reverse(array);
float value = BitConverter.ToSingle(array, 0);
EDIT:
あるいは、Dimitry Bychenkoが示唆されているように、あなたものエンディアンをチェックするためにBitConverter.IsLittleEndian
を使用することができますコンバータ:
byte[] array = new byte[] {0x41, 0xCC, 0xB7, 0xCF}; //array written in Big Endian
if (BitConverter.IsLittleEndian) //Reverse the array if it does not match with the BitConverter endianess
Array.Reverse(array);
float value = BitConverter.ToSingle(array, 0);
'BitConverter.IsLittleEndian'は実際のエンディアンをチェックします(そしてあなたの解決策を一般化します):' float value = BitConverter.IsLittleEndian? BitConverter.ToSingle(array.Reverse()。ToArray()、0):BitConverter.ToSingle(array、0); ' –
@DmitryBychenko提案していただきありがとうございます。私は可読性のため少し修正して私の答えを編集しました! ;) – Ian
[効率的に進にバイト配列を変換する]の可能な重複(http://stackoverflow.com/questions/16979164/efficiently-convert-byte-array-to-decimal) – user1845593