【问题标题】:C# shift an array of byteC# 移位字节数组
【发布时间】:2013-09-30 21:16:27
【问题描述】:

我想计算这个:tab<<1 with tab 字节数组

我做了这几行,但似乎不起作用。我是不是做错了什么?

byte[] T = new byte[16];


for (int i = 0; i < 16; i++) T[i] = (byte)(tab[i] << 1);

【问题讨论】:

  • “但是好像不行”。什么不起作用?你期待什么,你得到什么?
  • 第一行不是有效的 C# 代码。
  • 你到底想在这里做什么?看起来您想将数组中的每个元素左移 1,对吗?
  • 这不起作用,因为每个字节中的 MSB 被丢弃,而它必须成为下一个字节的 LSB。您可以在移位之前使用掩码保存 MSB,然后将其添加到下一个字节
  • 谢谢!如果我想保存 MSB,我需要用 0xff 异或?然后如果 MSB 为 1,我是否必须将 1 添加到下一个字节?

标签: c# byte shift


【解决方案1】:

如果你想结转每个字节的MSB,你可以这样做:

var t = new byte[16];

byte carry = 0x0;
for (var i = 15; i >=0 ; i--)
{
    var newcarry = (byte) (t[i] & 0x80);
    t[i] = (byte) (t[i] << 1 + carry);
    carry = newcarry;
}

【讨论】:

  • 谢谢!但我的行有问题: var newcarry = (byte) (t[i] & 0x80);即:索引超出了数组的范围。
  • 是的,我看到了,但即使我写了 i-- 错误仍然存​​在:s
  • 那里的 i 值是多少?
猜你喜欢
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
  • 2015-11-18
  • 2023-03-17
  • 2012-09-20
  • 1970-01-01
相关资源
最近更新 更多