我正在编写一个修改二进制文件的 C# 程序。在文件中有一个字节存储有关一个人穿着的所有信息。
示例:
1 = 帽子
2 = 鞋子
4 = socks
8 = 裤子
16 = 衬衫
32 = 眼镜
64 = 观看
128 = 耳环
Sally 穿着鞋子、裤子和衬衫 = 2 + 8 + 16 = 26。存储的字节是26。
Fred 戴着帽子、鞋子、 socks 、油漆、衬衫、眼镜和 watch :1 + 2 + 4 + 8 + 16 + 32 + 64 = 127。存储的字节是127
现在我想用那个号码弄清楚他们穿的是什么。一个人不能穿两件相同的东西,只有这 8 种选择。
最佳答案
你有一个 bit mask .
使用您的 2 + 8 + 16 = 26
示例,您可以使用按位“与”运算符 &
提取每一位。要检查此人是否穿鞋,请将位掩码与 2“和”并检查结果:
011010 = 26
& 000010 = 2 <-- bitwise "and" operator
-------------
000010 = 2
如果位掩码是 5 而不是 26,结果将是:
000101 = 5
& 000010 = 2 <-- bitwise "and" operator
-------------
000000 = 0
所以获取结果并检查它是否大于零。就是这样:
bool isHat = bitMask & 1 > 0;
bool isShoes = bitMask & 2 > 0;
bool isSocks = bitMask & 4 > 0;
//and so on
仅供引用:我猜您正在通过将 2 的幂添加到累加器来设置位掩码,如下所示:
byte SetWatch(byte bitMask) {
return bitMask + 64;
}
您也可以使用位运算来执行此操作。像这样使用按位“或”:
byte SetWatch(byte bitMask) {
return bitMask | 64;
}
关于c# - 找出加在一起时哪些字节等于另一个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35302570/