[英]C#: Convert ushort to float
從我正在使用的圖書館我收到了一系列的ushort
。
我想在float
數組中轉換它們:第一個ushort
表示第一個float
的16個MSB,第二個ushort
是第一個float
的16個LSB,依此類推。
我嘗試使用類似下面的內容,但是值被轉換為整數的值,而不是原始位:
ushort[] buffer = { 0xBF80, 0x0000 };
float f = (uint)buffer[0] << 16 | buffer[1];
// expected result => f == -1 (0xBF800000)
// effective result => f == 3.21283686E+9 (0x4F3F8000)
有什么建議嗎?
特別是ToSingle方法,它接受一系列字節並將它們轉換為浮點數。
ushort[] buffer = {0xBF80, 0x0000};
byte[] bytes = new byte[4];
bytes[0] = (byte)(buffer[1] & 0xFF);
bytes[1] = (byte)(buffer[1] >> 8);
bytes[2] = (byte)(buffer[0] & 0xFF);
bytes[3] = (byte)(buffer[0] >> 8);
float value = BitConverter.ToSingle( bytes, 0 );
編輯
在這個例子中,我已經顛倒了MSB / LSB順序..現在它是正確的
您應該使用BitConverter類。
使用BitConverter.GetBytes(UInt16)將兩個ushorts轉換為字節數組,連接兩個數組並使用BitConverter.ToSingle(byte [] value,int startIndex)將結果數組中的4個字節轉換為float。
使用C#聯合:
[System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit)]
public struct FloatUShortUnion {
[System.Runtime.InteropServices.FieldOffset(0)]
float floatValue;
[System.Runtime.InteropServices.FieldOffset(0)]
ushort short1;
[System.Runtime.InteropServices.FieldOffset(16)]
ushort short2;
}
我會看一下System.BitConverter類。 您可以使用BitConverter.GetBytes將您的ushorts轉換為字節數組,然后組合您的字節數組並使用BitConverter將字節數組轉換為浮點數。
您將需要使用System.BitConverter
,並將短路轉換為字節。
http://msdn.microsoft.com/en-us/library/system.bitconverter.tosingle.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.