【发布时间】:2026-01-28 12:10:01
【问题描述】:
我需要根据 IEEE-11073 将一个两字节数组转换为 SFloat 格式。
我该怎么做?
我在这里回答我的问题。
public float ToSFloat(byte[] value)
{
if (value.Length != 2)
throw new ArgumentException();
byte b0 = value[0];
byte b1 = value[1];
var mantissa = unsignedToSigned(ToInt(b0) + ((ToInt(b1) & 0x0F) << 8), 12);
var exponent = unsignedToSigned(ToInt(b1) >> 4, 4);
return (float)(mantissa * Math.Pow(10, exponent));
}
public int ToInt(byte value)
{
return value & 0xFF;
}
private int unsignedToSigned(int unsigned, int size)
{
if ((unsigned & (1 << size-1)) != 0)
{
unsigned = -1 * ((1 << size-1) - (unsigned & ((1 << size-1) - 1)));
}
return unsigned;
}
【问题讨论】:
-
嗨 Jovirus,欢迎来到 *。你试过什么了?你的方法有什么问题?如果 * 上的问题不包含具有特定问题的代码,它们将很快被关闭。
-
.. 我发现上面的问题与 Java 有关,但您应该能够将相同的原则应用于 C#。
-
@WaiHaLee 我解决了它,并将我的答案放在我的问题中。
标签: c# floating-point ieee-11073