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

标签 c# arrays data-conversion

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

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

enter image description here

最佳答案

我发现由于 double 至少需要 8 个字节,因此; 不可能将 double 转换为任意大小的字节数组(换句话说:将其压缩为小于 8 字节的字节数组)而不损失精度和损害原始值

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

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

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

        MainDataStorage.NumberOfDivisionBy2 = 0;

        return value;
    }

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

关于c# - 如何将 double 转换为任意大小的字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32536990/

相关文章:

c# - 在 WCF 中,操作是否总是在与消息检查器相同的线程上调用?

C数组初始化,两者都可以接受吗?

c# - 自动映射器从字符串转换为 Int

java - 将2的补码中的2字节整数从二进制文件读取为整数

带有结构的 C 数组 - 不能更改变量

r - 如何从二进制表/矩阵创建表达式输入样式格式?

C# WPF OnPropertyChanged 在 foreach 循环中

c# - C# 十进制转整数

c# - 即使元素确实存在,LINQ to XML Elements() 和 Descendants() 也没有产生任何结果

javascript - map() 中的两个导入 div