正在组合2个字节
本文关键字:字节 2个 组合 | 更新日期: 2023-09-27 18:28:55
我有一个字节a和字节B。我正在寻找字节C,它是来自a的每隔一位,也是来自B的每隔一个位。所以,如果a=10011010,B=01110010,那么C将是10110101,其中1011是来自a,0101是来自B的每一位。有人能帮我吗?
试试这个:
byte C = (byte)(
(A & 0x80) |
((A & 0x20) << 1) |
((A & 0x08) << 2) |
((A & 0x02) << 3) |
((B & 0x80) >> 4) |
((B & 0x20) >> 3) |
((B & 0x08) >> 2) |
((B & 0x02) >> 1));
在线查看:ideone
应该这样做:
var nibble1 = ((a & 0x80) << 3) | ((a & 0x20) << 2) |
((a & 0x08) << 1) | (a & 0x02);
var nibble2 = ((b & 0x80) << 3) | ((b & 0x20) << 2) |
((b & 0x08) << 1) | (b & 0x02);
var result = (nibble1 << 4) | nibble2;
对于每个输入字节,你取"第一个"字节(实际上习惯上是从另一端开始计数,但我在这里听起来更简单),将其移位3位(为其他字节腾出空间),添加"第三个"字节,(将其移位两位)等。
然后你把刚计算出的第一个半字节移到四个位置(为第二个腾出空间),然后把它们粘在一起。
$a = 154; //10011010
$b = 114; //01110010
$expected = 181; //10110101
$result = (($a>>1)&1)+(($a>>2)&2)+(($a>>3)&4)+(($a>>4)&8) << 4
| (($b>>1)&1)+(($b>>2)&2)+(($b>>3)&4)+(($b>>4)&8);
echo $expected == $result;
让我想一想,这可以更有效地完成。。。
另一个:
$a = 154; //10011010
$b = 114; //01110010
$expected = 181; //10110101
$result = ($a&0x80)+(($a<<1)&0x40)+(($a<<2)&0x20)+(($a<<3)&0x10)+
(($b>>4)&0x8)+(($b>>3)&0x4)+(($b>>2)&0x2)+(($b>>1)&0x1);
echo $expected == $result;
现在我注意到C#标签。。。