我一直在將我的應用程序的某些部分從C++轉換爲C#。有這個編碼/解碼,我需要讀取一個變量,其定義爲UINT的浮動部分:C#相當於(讀取變量作爲不同類型)
uint result = 0;
... // a value is set to result
return (*((float *)&result)); // get result as a float value
反正到最後一行轉換爲C#?謝謝大家..
我一直在將我的應用程序的某些部分從C++轉換爲C#。有這個編碼/解碼,我需要讀取一個變量,其定義爲UINT的浮動部分:C#相當於(讀取變量作爲不同類型)
uint result = 0;
... // a value is set to result
return (*((float *)&result)); // get result as a float value
反正到最後一行轉換爲C#?謝謝大家..
你可以做到這一點與不安全的代碼 - 或者你可以使用BitConverter.GetBytes()
將值轉換成字節數組,然後BitConverter.ToSingle()
轉換回。這顯然效率較低,但如果您處於不能使用不安全代碼的情況下,它將起作用。
編輯:有,我已經在MiscUtil使用的另一種選擇,使用類似C的「聯盟」,以更加努力喜歡你原來的例子,但通過自定義的結構:
[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; }
}
}
(你可以長時間做同樣的事情,當然也是雙重做法。)
您可以使用BitConverter。例如,
return BitConverter.ToSingle(BitConverter.GetBytes(result), 0);
BitConverter
班是你的朋友在這裏。 http://msdn.microsoft.com/en-us/library/system.bitconverter.aspx
兩個選項:
1)使用C#指針。如果您在項目的屬性中啓用「不安全的代碼」,編譯器將允許您。請在這裏閱讀更多:http://msdn.microsoft.com/en-us/library/y31yhkeb(v=VS.100).aspx
2)使用BitConverter類。具體來說,BitConverter.GetBytes()將您的uint轉換爲字節,然後將BitConverter.ToSingle()轉換爲浮點型字節。在這裏閱讀:http://msdn.microsoft.com/en-us/library/system.bitconverter.aspx
祝你好運!
如果我沒有誤解這個問題,你可以這樣做'return Convert.ToSingle(result);'in C# –