1

2進数の文字列表現内で特定の2進数ビット値を見つけるための解決策はありますか?たとえば、64ビット長のバイナリ文字列があります。

0000000000000000000000000001000000000000000000100001001000000000

左から28番目のビットの値を見つけて返す必要があります。上記の例では、に等しくなり1ます。

4

4 に答える 4

2
int val = s[28 - 1] - '0';  ///////
于 2012-08-09T21:36:37.480 に答える
1

さて、左から283番目のビットの値はビット(64-28)の値です。2^3664

したがって、値を使用してバイナリ&を作成します。変更され28た場合は、左から3番目が0、そうでない場合は、であったことを意味します。1

long value = ... 
//binary rapresentation value is (say) 

0000000000000000000000000001000000000000000000100001001000000000

そう、もし

if(value & 2^36 != value) //binary AND 
    return 0; //28th was 0
else
    return 1; //28th was 1

これがあなたが求めているものではない場合は、明確にしてください。

于 2012-08-09T21:37:31.883 に答える
1

ここでは言語の壁かもしれませんが、これはindexOfに適した場所のように聞こえますか?文字列の特定の部分を取得する必要がある場合は、次のようにします。

//string array for example
foreach(string BinaryString in BinaryStrings[])
{
  string TwentyEightBitSub = BinaryString.SubString(28);
  if(TwentyEightBitSub.indexOf("00000010") != -1)
  {
    //do something with matched string 
  }

}
于 2012-08-09T21:38:43.670 に答える
0

文字列が64ビットになることを常に知っている場合(先行ゼロが存在しないことはありません)、これは機能します。

private int getBit(string binString, int index) {
    if (binString == null)
        throw new ArgumentNullException("binString");
    if (binString.Length != 64)
        throw new ArgumentException("binString was not of length 64.", "binString");
    if (index < 0 || index > 63)
        throw new ArgumentException("index was not in [0,63]", "index");

    char theBit = binString[binString.Length - (1 + index)];
    if (theBit == '0')
        return 0;
    else if (theBit == '1')
        return 1;
    else
        throw new ArgumentException("The supplied string was not binary.", "binString");
}
于 2012-08-09T21:39:37.717 に答える