2011-02-28 11 views
2

私はアプリケーションの一部をC++からC#に変換しています。私はUINTとして定義されているfloat型として変数を読み取る必要がある。このエンコード/デコード部分があります:C#に相当する(別の型として変数を読み込む)

uint result = 0; 

... // a value is set to result 

return (*((float *)&result)); // get result as a float value 

とにかくC#のに最後の行を変換するために?ありがとうございます..

+0

私はこの質問を誤解していない場合は、C#で 'return Convert.ToSingle(result);' –

答えて

6

あなたは危険なコードでそれを行うことができます。それはあまり効率的ではありませんが、安全ではないコードを使用できない状況にある場合はうまく動作します。

EDIT:あなたは(可能性が

[StructLayout(LayoutKind.Explicit)] 
    struct Int32SingleUnion 
{ 
    [FieldOffset(0)] 
    int i; 

    [FieldOffset(0)] 
    float f; 

    internal Int32SingleUnion(int i) 
    { 
     this.f = 0; // Just to keep the compiler happy 
     this.i = i; 
    } 

    internal Int32SingleUnion(float f) 
    { 
     this.i = 0; // Just to keep the compiler happy 
     this.f = f; 
    } 

    internal int AsInt32 
    { 
     get { return i; } 
    } 

    internal float AsSingle 
    { 
     get { return f; } 
    } 
} 

:そこ私はMiscUtilに使用してきた別の代替は、はるかにあなたの元の例のように動作するようにCに似た「ユニオン」を使用して、ですが、カスタム構造体を介しました長いと同じことをやってください。)

4

BitConverterを使用できます。またはあなたはバイト配列に値を変換するためにBitConverter.GetBytes()を使用することができ、その後、BitConverter.ToSingle()バック変換すること - 例えば、

return BitConverter.ToSingle(BitConverter.GetBytes(result), 0); 
2

つのオプション:

1)C#のポインタを使用してください。コンパイラは、プロジェクトのプロパティで「安全でないコード」を有効にすると許可します。詳しくはこちらhttp://msdn.microsoft.com/en-us/library/y31yhkeb(v=VS.100).aspx

2)BitConverterクラスを使用してください。具体的には、BitConverter.GetBytes()はuintをバイトに変換し、次にBitConverter.ToSingle()を使用してバイトをfloatに変換します。ここをクリックしてください:http://msdn.microsoft.com/en-us/library/system.bitconverter.aspx

幸運!

関連する問題