【问题标题】:Float to Byte array in other format其他格式的浮点到字节数组
【发布时间】:2018-02-07 12:55:36
【问题描述】:

我正在使用 Bitconverter 将浮点数转换为字节数组。

byte[] ValueByteArray = BitConverter.GetBytes(Value);

现在我正在使用另一个应用程序评估我的应用程序,目标当然是我的输出完全相同。问题是,它不是。

我 100% 确定测试输出是正确的,我的值是“错误的”或其他格式。因为在连接到参考应用程序的客户端中,该值为 5.5,而我的值为 6.09414613e-039

我的申请:

  • 测试值:5,5
  • 字节数组值:0.0.5C.42
  • 客户端应用程序中的值:6.09414613e-039

参考应用:

  • 测试值:5,5
  • 字节数组值:0.0.B0.40
  • 客户端应用程序中的值:5,5

【问题讨论】:

  • BitConverter.ToString(BitConverter.GetBytes(5.5f))00-00-B0-40。仔细看看 Value 究竟是什么。
  • 当您使用BitConverter 生成将在不同机器之间共享的数据时,请务必牢记BitConverter.IsLittleEndian。您不希望您的应用程序产生依赖于所使用架构的结果。 (与问题本身无关,但我想我会指出一个潜在的陷阱)

标签: c# arrays bitconverter


【解决方案1】:

您的参考申请是正确的; 0x00005C42 是 55,而不是 5.5;这可能就像您的某些解析代码中的小数说明符一样简单。 6.09414613e-039 似乎是字节顺序中的一个错误(见底行)

例子:

float value = 5.5F;
var bytes = BitConverter.GetBytes(value);
Console.WriteLine(BitConverter.ToString(bytes)); // 00-00-B0-40

float value = 55;
var bytes = BitConverter.GetBytes(value);
Console.WriteLine(BitConverter.ToString(bytes)); // 00-00-5C-42

float value = 6.09414613e-039F;
var bytes = BitConverter.GetBytes(value);
Console.WriteLine(BitConverter.ToString(bytes)); // 00-5C-42-00

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-08
    • 2014-02-22
    • 2012-12-01
    • 2021-08-09
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    相关资源
    最近更新 更多