将两个互斥的字节数组合成一个

时间:2016-08-31 09:25:17

标签: c# arrays bit-shift bits

我有2个字节的数组,每个5字节。每个字节数组代表40个标志,我需要将两个数组合并为一个5字节的数组。每个字节数组都是互斥的,这有助于,虽然我更愿意验证它们是互斥的。

所以我的问题是,如何将两个互斥的字节数组合成一个。

我能想到的唯一方法是在两个数组之间进行位移和比较每个值,但必须有一种更简单的方法。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

要将一个字节中的位与另一个字节中的位组合,可以使用按位或运算符|。如果该位在第一个或第二个字节中设置,则此运算符将在结果字节中设置一个位。

示例:

byte b1 = 0x12; // 0001 0010
byte b2 = 0x81; // 1000 0001
byte result = (byte)(b1 | b2); // Results in 0x93 = 1001 0011

组合两个数组:

byte[] flags1 = ...;
byte[] flags2 = ...;
byte[] result = new byte[5];
for(int i = 0; i < 5; i++)
    result[i] = (byte)(flags[i] | flags[2]);

使用bitwise-AND运算符&可以确定是否在两个字节中都设置了任何位。例如:

byte b1 = 0x93; // 1001 0011
byte b2 = 0x1A; // 0001 1010
byte result = (byte)(b1 & b2); // Results in 0x12 = 0001 0010

检查两个数组中是否未设置位:

byte[] flags1 = ...;
byte[] flags2 = ...;
for(int i = 0; i < 5; i++)
    if ((byte)(flags[i] & flags[2]) != 0)
        throw new InvalidOperationException("Flags cannot be set in both arrays.");