我有一个短值X:
short X=1; //Result in binary: 0000000000000001
我怎么能无痛地做到这一点? 你能帮忙吗?
答案 0 :(得分:0)
如果您有一个int值“intValue”并且您想在位置“bitPosition”设置一个特定位,请执行以下操作:
intValue = intValue | (1 << bitPosition);
或更短:
intValue |= 1 << bitPosition;
如果要重置一位(即将其设置为零),可以执行以下操作:
intValue &= ~(1 << bitPosition);
(运算符〜反转某个值中的每个位,因此〜(1&lt;&lt; bitPosition)将产生一个int,其中除了给定bitPosition处的位外,每个位都为1。)
答案 1 :(得分:0)
<强> 1。手动解决方案
设置第6位和第10位:
myValue |= (1 << 6)|(1 << 10);
清除第6位和第10位:
myValue &= ~((1 << 6)|(1 << 10));
<强> 2。使用BitArray
var bits = new BitArray(16); // 16 bits
bits[5] = true;
bits[10] = true;
转换回简称:
var raw = new byte[2];
bits.CopyTo(raw, 0);
var asShort = BitConverter.ToInt16(raw, 0);
答案 2 :(得分:0)
如果您所指的是非常基本的加密,那么使用XOR(^
)运算符可能更适合您的需求。
short FlipBytes(short original, params int[] bytesToSet)
{
int key = 0;
foreach (int b in bytesToSet)
{
if (b >= 0 && b < 16)
{
key |= 1 << b;
}
}
return (short)(original ^ key);
}
此方法将设置和重置所需的字节。例如:
short X = 1;
short XEncrypt = FlipBytes(X, 6, 10);
short XDecrypt = FlipBytes(XEncrypt, 6, 10);
// X = 1 , Binary = 0000000000000001
// XEncrypt = 1089 , Binary = 0000010001000001
// XDecrypt = 1 , Binary = 0000000000000001