2016-06-17 16 views
-1

を使ってC#にC++アルゴ書き換えI CBitArray

 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を取得します:演算子 '< < =' 'BitArray'と 'int'型のオペランドには適用できません C++と同じように、値を左にシフトして設定できます。私は幸運なしに何時間もウェブを検索している、誰も私を助けることができる?

+0

は右、見えますか?参照してください:http://stackoverflow.com/questions/3684002/bitarray-shift-bits – rene

+0

私はあなたが十分に十分な検索ではないかもしれないと思います。私の最初の検索で解決策が見つかった。 – KDecker

答えて

0

いくつかの情報です bitarrayはビットセットの正確な代わるものではありませんビットアレイ原因でそのようにビットシフト演算子を使用することはできませんC#のBitArray。可能な実装については、Shifting a BitArrayを参照してください。

ストレートポートを使用するのではなく、.Netの機能のいくつかを利用してみませんか?

(テストされ、いくつかの変数の目的で野生の推測を取るが、一般的なアイデアを提供していない):あなたはBitArrayを左シフトしたいよう

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()); 
関連する問題