我在C
中有以下代码 std::bitset < 80 > license;
for (i = 3; i >= 0; i--)
{
for (j = 0; j < 32; j++)
{
if (CDKeyCopy[i] == TranslateTable[0][j])
{
license <<= 5;
license |= j;
break;
}
}
if (j == 32) //not found in TranslateTable
return BADCDKEYCHAR;
}
我想在C#中执行以下操作
BitArray license = new BitArray(80);
for (i = 15; i >= 4; i--)
{
for (j = 0; j < 32; j++)
{
if (licValue[i] == year[j])
{
license <<= 5;
license |= j;
break;
}
}
//not found in TranslateTable
if (j == 32)
{
return LicenseInfos.BADCDKEYCHAR;
}
}
我收到以下错误 错误CS0019:运算符'&lt;&lt; ='不能应用于'BitArray'和'int'类型的操作数 我希望能够将值移到左边并设置它,就像在c ++中一样。我在网上搜索了几个小时而没有任何运气,任何人都可以帮助我吗?
答案 0 :(得分:0)
你不能像位数组那样使用位移运算符 bitarray并不完全取代bitset
答案 1 :(得分:0)
C#中的BitArray没有实现移位运算符。有关可能的实施,请参阅Shifting a BitArray。
为什么不利用.Net的一些功能呢?
而不是直接端口e.g。 (没有测试并对一些变量的目的进行疯狂的猜测,但给出了一般的想法):
var licValue = new List<int> { ... };
var years = new List<int> { ... }; // 32 years listed
int lic = 0;
...
if (licValue.Any(y => !years.Contains(y))) return LicenseInfos.BADCDKEYCHAR;
for (i = 15; i >= 4; i--)
{
// lic <<= 5 then license |= index of year array
lic *= 32 + years.IndexOf(years.Where(y => licValue[i] == y).First());
}
// convert int to BitArray
var licenseArray = new BitArray(lic.PadLeft(80, '0')
.ToCharArray().Select(b => b == '1' ? true : false).ToArray());