【问题标题】:Convert byte array to float 32bit and 64bit?将字节数组转换为浮点 32 位和 64 位?
【发布时间】:2014-04-25 07:45:46
【问题描述】:

如何将字节数组中的 4 个字节转换为 32 位浮点数?那么对于 64 位浮点数(双精度),您将如何对字节数组中的 8 个字节执行相同操作?我注意到 C# 中的 BitConverter 类有这个,但是我很好奇它背后的数学。

我目前已经编写了很多字节转换函数,但使用 BitConverter 类而不是我自己的函数会更有效吗?

【问题讨论】:

    标签: c# bit-manipulation bitconverter


    【解决方案1】:

    使用BitConverter 函数通常会更有效,但在某些情况下(例如,将两个字节转换为短字节),如果您编写内联移位和或操作,代码会快得多。

    如有疑问,请使用 Stopwatch 检测代码并为发布构建计时。只有这样才能知道,真的。

    但是,如果您正在处理 数组 值,那么使用 @987654323 将整个数组从一种类型转换为另一种类型会更快更容易(但会占用内存空间) @。

    例如,您可以将双精度数组复制到字节数组并返回如下:

    double[] original = {1.0, 2.0, 3.0, 4.0, 5.0};
    int byteCount = sizeof(double) * original.Length;
    
    byte[] asBytes = new byte[byteCount];
    Buffer.BlockCopy(original, 0, asBytes, 0, byteCount);
    
    double[] copied = new double[original.Length];
    Buffer.BlockCopy(asBytes, 0, copied, 0, byteCount);
    
    foreach (double d in copied)
        Console.WriteLine(d);
    

    这可能更适合您的特定场景。与以往一样,您需要仔细安排时间来确定它是否有用。

    【讨论】:

    • 我正在对服务器进行编程,所以我不确定当我可能有许多连接和许多数据包进出时使用块复制功能是否是个好主意。
    • 位转换器对我来说似乎有些问题。主要是我无法使用 to string 函数指定字符串的长度。那么我将如何手动将位移位转换为 32/64 位浮点数?
    • @user3519915 字符串与此有什么关系?
    • 解释位转换器缺乏功能的简单示例。
    • @user3519915 我不明白 - BitConverter 用于将值类型转换为字节数组/从字节数组转换。转换成字符串/从字符串转换是字符串格式化和解析,一个不相关的概念。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 2011-10-25
    • 2020-04-27
    相关资源
    最近更新 更多