C# 如何将双精度字节数组转换为任意大小的字节数组?

C# 如何将双精度字节数组转换为任意大小的字节数组?,c#,bytearray,data-conversion,C#,Bytearray,Data Conversion,我正在C的一个项目中工作,我必须使用名为ASTERIX的开源协议从字节数组中提取数据。修改数据后,我想对它们进行编码,并再次根据协议将其放入字节数组中。我的问题是,在某个时刻,我需要将双精度数组转换为字节数组。根据协议,这个字节数组应该是3个字节(3个八位字节),而我在转换后得到的字节数组是8个字节。是否有任何内置函数可用于将双精度数组转换为3字节数组? 另外,3字节对于我的双倍值来说已经足够了。如果有帮助,我这里有一些代码: double val = 32673.6953125; byte[]

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

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

我想既然一个double至少需要8个字节,那么不可能将双精度字节数组转换为任意大小的字节数组(换句话说:将其压缩为小于8字节的字节数组),而不会丢失精度并损害原始值

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

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

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

        MainDataStorage.NumberOfDivisionBy2 = 0;

        return value;
    }

有关ASTERIX协议的更多信息,请转到:

double有8个字节的数据。您希望如何将数据存储在3个字节中?这将是有损的,您需要告诉我们格式。@usr您完全正确。我完全忘记了双人间的大小。你能告诉我你想要的格式是什么吗?你打算如何将8个字节转换成3个字节?@usr当我看到一些转换成字节的值时,看起来我可以得到一个索引值,并将其添加到另一个索引值中,只要它在255以下。但后来我意识到:1)它改变了原来的值2)不可能对其他双精度值进行同样的操作。但也许你可以帮我:使用
BitConverter
class是否是将值转换为字节数组的正确方法?这是正确的方法,但在你弄清楚如何将8字节转换为3字节之前,这是行不通的。理想情况下,整个信息都应该作为问题的一部分@阿达莎,我现在就做。sryWhere是数组,如“如何将double转换为任意大小的字节数组?”@Roy正如usr在注释中提到的,double需要8个字节,您不能将其强制转换为小于8个字节的数组。我的想法是(听起来很愚蠢)在一个索引中获取一个值,然后尝试找到另一个索引。如果它们的总和小于255,我会将这两个值的总和移动到一个索引中(例如图中的index3+index4)。但那是行不通的。@Roy你完全正确。忘记了double需要8个字节这一简单事实,我就想到了这个问题。我不知道怎样才能正确回答这个问题。也许我只需要提一句,我不可能做到这一点而不损失精度和原始价值?我愿意接受你的任何建议:)