C#16位浮点转换

问题描述 投票:0回答:1

我从这里开始使用float 16 Half类型-https://gist.github.com/vermorel/1d5c0212752b3e611faf84771ad4ff0d

我已经定义了以下方法,将Half值转换为二进制字符串:

    static string HalfToBinaryString(Half value)
    {
        int bitCount = Marshal.SizeOf(value) * 8;

        string s = String.Empty;

        // value is the value you want to convert to a string (double, long, int, ...)
        foreach (byte b in Half.GetBytes(value))
        {
            s += Convert.ToString(b, 2).PadLeft(8, '0'); // for hex. For binary, use 2 and 8. For octal, use 8 and 3
        }

        return s;
    }

以及以下将二进制字符串值转换为Half的方法:

    static Half HalfFromBinaryString(string bstra)
    {
        int intValue = Convert.ToInt16(bstra, 2);

        return (Half)BitConverter.ToInt16(Half.GetBytes(intValue), 0);

    }

当我执行以下除法时,我得到:

string dividend = "11001001001111111";
Half result = (Half)(Convert.ToSingle(Convert.ToInt32(dividend, 2)) / 65536.0);
var rawbits = HalfToBinaryString(result);

//result = 1.571289
//rawbits = "0100100100111110"

但是,当我执行反向操作时,却得到:

Half halfval = HalfFromBinaryString(rawbits);

//halfval = 29840 //(instead of 1.571289)

如何将16位二进制字符串表示形式转换为正确的Half值(1.571289)?

c# floating-point binary data-conversion 16-bit
1个回答
0
投票
由于Half结构为您提供了ToHalf(ushort)方法,因此您可以使用它来创建Half。本质上,将字符串解析为ushort,然后将ushort传递到ToHalf
© www.soinside.com 2019 - 2024. All rights reserved.