我正在使用 C# 开发一个项目,我必须使用以下命令从字节数组 中提取数据一个名为 ASTERIX 的开源协议(protocol)。修改数据后,我想对它们进行编码,并再次根据协议(protocol)将其放入字节数组。我的问题是在某些时候我需要将 double 转换为字节数组。根据协议(protocol),这个字节数组应该是 3 个字节(3 个八位字节),而我在转换后得到的字节数组是 8 个字节。是否有任何内置函数可用于将 double 转换为 3 字节字节数组? 另外,对于我拥有的 double 值,3 字节绝对足够了。如果有帮助,我这里有一些代码:
double val = 32673.6953125;
byte[] brokenBytes = BitConverter.GetBytes(doubleValue);;
最佳答案
我发现由于 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/