2017-05-05 5 views
1

私はこの4バイトを持っています:0x41 0xCC 0xB7 0xCF そして私は25.5897503の番号を見つけなければなりません。 WINDEVで4バイトから10進数 - C#Windevから

、サンプルが転送()関数を使用していますが、私はC#で

を同等見つけることができないあなたには、いくつかの兆候で私を助けてもらえますか?

ありがとうございました

+1

[効率的に進にバイト配列を変換する]の可能な重複(http://stackoverflow.com/questions/16979164/efficiently-convert-byte-array-to-decimal) – user1845593

答えて

4

精度が必要です。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); 
+1

'BitConverter.IsLittleEndian'は実際のエンディアンをチェックします(そしてあなたの解決策を一般化します):' float value = BitConverter.IsLittleEndian? BitConverter.ToSingle(array.Reverse()。ToArray()、0):BitConverter.ToSingle(array、0); ' –

+0

@DmitryBychenko提案していただきありがとうございます。私は可読性のため少し修正して私の答えを編集しました! ;) – Ian