将两个互斥的字节数组合并为一个
Combine two mutually exclusive byte arrays into one
我有 2 个字节数组,每个数组有 5 个字节。每个字节数组代表 40 个标志,我需要将两个数组组合成一个 5 字节的数组。每个字节数组都是互斥的,这很有帮助,尽管我更愿意验证它们是互斥的。
所以我的问题是,如何将两个互斥的字节数组合并为一个。
我能想到的唯一方法是在两个数组之间进行位移并比较每个值,但必须有一种更简单的方法。有人可以帮忙吗?
要将一个字节中的位与另一个字节中的位组合,可以使用按位或运算符 |
。如果该位已在第一个或第二个字节中设置,则此运算符将在结果字节中设置该位。
示例:
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]);
使用按位与运算符&
,您可以找出两个字节中是否设置了任何位。示例:
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.");
我有 2 个字节数组,每个数组有 5 个字节。每个字节数组代表 40 个标志,我需要将两个数组组合成一个 5 字节的数组。每个字节数组都是互斥的,这很有帮助,尽管我更愿意验证它们是互斥的。
所以我的问题是,如何将两个互斥的字节数组合并为一个。
我能想到的唯一方法是在两个数组之间进行位移并比较每个值,但必须有一种更简单的方法。有人可以帮忙吗?
要将一个字节中的位与另一个字节中的位组合,可以使用按位或运算符 |
。如果该位已在第一个或第二个字节中设置,则此运算符将在结果字节中设置该位。
示例:
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]);
使用按位与运算符&
,您可以找出两个字节中是否设置了任何位。示例:
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.");