2進数の文字列表現内で特定の2進数ビット値を見つけるための解決策はありますか?たとえば、64ビット長のバイナリ文字列があります。
0000000000000000000000000001000000000000000000100001001000000000
左から28番目のビットの値を見つけて返す必要があります。上記の例では、に等しくなり1
ます。
int val = s[28 - 1] - '0'; ///////
さて、左から28
3番目のビットの値はビット(64-28)の値です。2^36
64
したがって、値を使用してバイナリ&
を作成します。変更され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
これがあなたが求めているものではない場合は、明確にしてください。
ここでは言語の壁かもしれませんが、これは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
}
}
文字列が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");
}