1

是否有任何解决方案可以在二进制数的字符串表示中找到特定的二进制位值?例如,我有一个 64 位长度的二进制字符串:

0000000000000000000000000001000000000000000000100001001000000000

我需要找到并返回第 28 位的值,从左边开始。在上面的示例中,它等于1

4

4 回答 4

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

好吧,左边28第 th 位的值是位 (64-28) 的值。2^3664

因此,只需使用您的值制作一个二进制文件&,如果它已更改,则意味着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

如果这不是您要的,请澄清。

于 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 回答