簡體   English   中英

C#:將ushort轉換為float

[英]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)

有什么建議嗎?

看看System.BitConverter類。

特別是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM