-2

我有一个字节数组,例如 400 字节....然后是一个位的位置,例如 6。如何检查该位的值是否为 1?所以在我的例子中,返回值将是 true。

例子:

final byte[] b = new byte[] { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 });

什么是 00000100.... pos = 6 结果 = true

4

3 回答 3

0

由于您向后计算字节和数组中的位置:

public boolean bitAtPos (byte [] b, int pos) {
  int el = b[pos/8];
  return ((el >> (8-(pos%8)) & 1) == 1);
}
于 2012-05-09T10:25:16.153 回答
0

看起来好像你这样计算你的位数:

第 1 位是第一个字节的最高位,第 8 位是第一个字节的最低位,第 9 位是第二个字节的最高位,依此类推。

然后你可以使用:

private boolean isSet(int index) {
    int bitIndex = (index-1) % 8;
    int byteIndex = (index-1) / 8;
    int bitMask = 1 << 7-bitIndex;
    return (b[byteIndex] & bitMask) > 0; 
}

但是,如果您(对我来说)使用更自然的索引方式,以便位 0 是第一个字节中的最低位,位 7 是第一个字节的最高位,位 8 是最低位但第二个字节(等等on) 可能是:

private boolean isSet(int index) {
    int bitIndex = index % 8;
    int byteIndex = index / 8;
    int bitMask = 1 << bitIndex;
    return (b[byteIndex] & bitMask) > 0; 
}
于 2012-05-09T10:55:27.567 回答
-1
boolean validateValue(byte[] array, int numberToValidate, int position) {
    return (array.length > position-1 && position >= 1) ? array[position-1] == numberToValidate : false;
}

此方法可帮助您对要验证的任何数字多次使用它。注意:我添加了一些预验证:
如果您使用无效位置作为参数,它将返回 false。最佳做法是抛出异常,但我会处理。

于 2012-05-09T10:33:49.323 回答