如何将double转换为任意大小的字节数组?

时间:2015-09-12 08:55:12

标签: c# bytearray data-conversion

我正在 C# 中开展项目,我必须使用 字节数组 提取数据一个名为 ASTERIX 的开源协议。修改数据后,我想对它们进行编码,并再次根据协议将其放入 字节数组 中。我的问题是,在某些时候我需要将double转换为字节数组。根据协议,该字节数组应为3个字节(3个OCTETS),而转换后得到的字节数组为8个字节。是否有任何内置函数可用于将double转换为3字节字节数组? 另外,3字节绝对足以满足我的双倍价值。如果它有帮助,我在这里有一些代码:

double val = 32673.6953125;
byte[] brokenBytes = BitConverter.GetBytes(doubleValue);;

enter image description here

1 个答案:

答案 0 :(得分:0)

我发现因为double需要至少8个字节,所以; 无法将double转换为任意大小的字节数组(换句话说:将其压缩为小于8字节的字节数组),而不会降低精度并损害原始值 < / strong>。

额外信息: 对于任何有兴趣的人,在阅读有关ASTERIX协议的文档后,我意识到我需要通过给定的算法处理该值。然后,该算法可以将值存储为3字节(3-OCTET)数据。 我需要处理的具体数据称为 跟踪时间信息 。 这是一个简单的解决方案:

private double PrepareElapsedTimeSinceMidnightForEncodeing(double value, int numberOfDivisionBy2)
    {
        value *= 128;

        value /= Math.Pow(2, numberOfDivisionBy2);

        MainDataStorage.NumberOfDivisionBy2 = 0;

        return value;
    }

有关ASTERIX协议的更多信息,请访问:ASTERIX | Eurocontrol