【问题标题】:Remove first 4 bits from a byte array (shift left) [duplicate]从字节数组中删除前 4 位(左移)[重复]
【发布时间】:2015-05-14 00:08:20
【问题描述】:

我有一个 3 字节的字节数组:byte[] VG = new Byte[3];

这是数组的值: 00-28-A0 。我必须删除前 4 位,并得到以下结果:02-8A-00

【问题讨论】:

  • 你到底有什么问题?您了解要使用的算法吗?如果没有,你解决它有什么困难?如果是这样,您在实施它时遇到了什么问题? (提示:每个字节都需要改变。根据旧值计算出每个字节的新值的表达式。)
  • 似乎不是重复的,因为他想移动 bits 而不是 bytes
  • 感谢您的回复。我收到一个数组,但前 4 位,我们不必使用。所以我需要对位进行转换,但我不明白如何做。我阅读了有关屏蔽的信息,但我发现的所有信息都仅用于屏蔽一个字节,在这种情况下,我必须将数组的所有位向左移动 4 位,以制作我想要的。

标签: c# arrays byte bit-shift


【解决方案1】:
// Shift Four Left
VG[0] = (byte)((byte)(VG[1] >> 4) + (byte)(VG[0] << 4));
VG[1] = (byte)((byte)(VG[2] >> 4) + (byte)(VG[1] << 4));
VG[2] = (byte)(VG[2] << 4);

// Shift Four Right
VG[2] = (byte)((byte)(VG[2] >> 4) + (byte)(VG[1] << 4));
VG[1] = (byte)((byte)(VG[1] >> 4) + (byte)(VG[0] << 4));
VG[0] = (byte)(VG[0] >> 4);

【讨论】:

  • 现场小提琴显示它有效。 dotnetfiddle.net/D1hDWm
  • 太棒了!!完美运行,谢谢!! .对不起,我不太了解掩蔽..如果我想把它移到右边会怎么样?在我提供给 obtein 的示例中:00-02-8A。感谢您的帮助
  • @ShaunLuttin 我以前不知道那个网站,谢谢!
  • 谢谢@TimBoss!我会读它..我想我可以随着时间的推移理解它。如果可能的话,你能给我举个右移的例子吗?有了这个,你帮了我太多了。
猜你喜欢
  • 2015-01-11
  • 1970-01-01
  • 2020-12-07
  • 1970-01-01
  • 1970-01-01
  • 2014-06-07
  • 1970-01-01
  • 2012-12-28
  • 2011-03-24
相关资源
最近更新 更多