【问题标题】:BitArray creates bits in reverse orderBitArray 以相反的顺序创建位
【发布时间】:2014-06-28 01:16:23
【问题描述】:

我有这个代码:

ASCIIEncoding ascii = new ASCIIEncoding();
byte[] bytes= ascii.GetBytes("ok");

此时,如果我调试并查看 byte 变量中的内容,我会得到:

111 107

这是我所期望的。 "o" 是 111 "k" 是 107

接下来,

BitArray bits = new BitArray(bytes);

此时,如果我调试并查看bits 变量中的内容,我会得到:

1 1 1 1 0 1 1 0 1 1 0 1 0 1 1 0

(实际的数组有 'True' where 1 和 'False' where 0 above)。

我想知道为什么会发生这种情况以及为什么位数组没有填充为

0 1 1 0 1 1 1 1 0 1 1 0 1 0 1 1 

改为。

【问题讨论】:

  • 当您查看 byte[] 时,您会看到索引 0、索引 1 等。当您查看 BitArray 时,您会看到位 0、位 1 等。它是 相同的顺序。您只是倾向于看到以相反方式写入的字节中的位。

标签: c#


【解决方案1】:

位数组以数组顺序返回位(真或假)。如前所述,字节格式时的顺序为:

8765 4321

迭代数组时,位按顺序返回:

1234 5678

进行心理翻译时有点混乱,但排序不是试图重现原始字节。

【讨论】:

  • 谢谢,有道理。尽管这样做有点令人困惑。
【解决方案2】:

来自documentation

数组中的第一个字节表示位 0 到 7,第二个 byte 表示位 8 到 15,依此类推。 最不重要的 每个字节的位代表最低的索引值:“bytes [0] & 1” 表示位 0,“字节 [0] & 2”表示位 1,“字节 [0] & 4” 表示位 2,依此类推。

【讨论】:

  • 更新了问题。我知道它首先填充最低有效位,但为什么会这样。有没有一些简单的方法可以反过来展示它?它现在打印它的方式是向任何会阅读该二进制文件的人表示 246 214。
  • en.wikipedia.org/wiki/Endianness 简短的回答 - 它根据您的处理器存储。如果您使用的是 x86 或 x64 处理器,它会优先存储最低有效位
  • 哈!那正是我在发布之前所处的位置,我认为这是一个处理器的事情,但主要想知道是否有一些简单的方法(我不知道)来控制它们的填充方式
  • @thorkia BitArray 枚举返回的顺序不取决于架构的字节顺序。 Endianness 定义了数据在内存中的存储方式。
猜你喜欢
  • 2015-06-09
  • 2012-05-05
  • 1970-01-01
  • 2011-06-15
  • 2023-03-31
  • 1970-01-01
  • 2016-09-20
  • 2015-02-17
  • 1970-01-01
相关资源
最近更新 更多