【问题标题】:BitConverter.ToUint16 giving incorrect value?BitConverter.ToUint16 给出不正确的值?
【发布时间】:2016-02-23 21:41:36
【问题描述】:

我的代码旨在提取 4 字节消息中的两个中间字节,然后附加两个中间字节以形成一个 16 位无符号整数。不幸的是,我遇到了 BitConverter.ToUint16 的问题 - 我的代码似乎无法正常使用它。

我在下面附上了代码和相关局部变量的图像。

在这个特定示例中,中心字节是十进制的“10”和“152”。在二进制中,它们是 00001010 和 10011000。这意味着 uint16 (numberIn) 应该是 0000101010011000 的十进制表示,即 2712。不幸的是,程序找到的值是 38922。

发生了什么事?!

【问题讨论】:

  • 38922 是二进制 1001100000001010。将其与您的“预期”值进行比较。你注意到什么了吗?现在去阅读wikipedia article on endianness

标签: c# binary


【解决方案1】:

.NET 使用 little endianness,所以 00001010 10011000 是 38922。(00001010b + 10011000b * 256)

【讨论】:

  • 谢谢 - 我现在已经使用 here 描述的功能解决了这个问题
猜你喜欢
  • 2022-01-19
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多