我正在尝试编写一个读取特定文件类型的解析器,我需要将不同的数据类型映射到C#等价物。他们中的大多数都不是那么困难,但是我无法绕过“具有偏差14的int16”的意思。我推断它是某种浮点类型,所以我最好的选择是编写一个转换器,将其映射为float,double或decimal类型。不过,我不知道从哪里拿它。
答案 0 :(得分:2)
您似乎正在处理Excess-K notation
意译:
Excess-K使用预先指定的数字K作为偏差值。值是 由无符号数表示, K大于 预期价值。因此,0表示为K,-K表示为 全零位模式。
因此,如果您在文件中看到偏差为14的20,则需要将其转换为6。
关于这种表示的一些背景:一些早期表示首选的方案,其中所有零都是可能的最低值,并且所有零都是可能的最高值。
假设你有3位int并且只想表示[0,7]范围内的非负数,你的方案是让000
代表0(最低值)和{{1}代表7(最高值)。在这种情况下,您的偏见将为0。
现在,如果你也希望能够代表-1。您需要通过将偏差设置为1来将您的值范围转换为[-1,6]。现在111
代表-1,000
代表6。
编辑:根据更新的信息
文档中此数据类型的完整描述 是“int16,偏差为14.这意味着它可以代表数字 介于1.999(0x7fff)和-2.0(0x8000)之间。 1.0存储为16384 (0x4000)和-1.0存储为-16384(0xc000)。
似乎我的编码方案想的精度16位为范围[-2,2)这是明显优于浮子对于特定的范围。您有4个线性数据点。我们知道范围是[-2,1.999],当前导位为1时,数字是负数。
111
为什么不在它们之间进行线性插值?
-2: 0x8000 (-32768)
-1: 0xc000 (-16384)
0: 0x0 (0)
1: 0x4000 (16384)
1.999: 0x7fff (32767)