是否有任何解决方案可以在二进制数的字符串表示中找到特定的二进制位值?例如,我有一个 64 位长度的二进制字符串:
0000000000000000000000000001000000000000000000100001001000000000
我需要找到并返回第 28 位的值,从左边开始。在上面的示例中,它等于1
。
int val = s[28 - 1] - '0'; ///////
好吧,左边28
第 th 位的值是位 (64-28) 的值。2^36
64
因此,只需使用您的值制作一个二进制文件&
,如果它已更改,则意味着28
左侧的 th 是 a 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");
}