删除最后一位字节

时间:2016-12-29 10:47:44

标签: java bit-manipulation bitwise-operators

我有一个字节数组,例如(字节数组可以多于或少于3个字节)

byte[] array = {0b00000011, 0b00111011, 0b01010101}

如何删除最后一位字节: 0b 0 0000011,0b 0 0111011,0b 0 1010101 因为我想得到像这样的结果11 | 0111011 | 1010101 但我不知道该怎么做

3 个答案:

答案 0 :(得分:0)

这不是很清楚,但也许我理解:你想删除一个字节前面的所有非重要位。你可以使用一个字符串;在伪代码中:

take a byte value N (or word or whatever)
prepare an empty string ST
while N<>0
  if (N & 1)
    then ST = "1"+ST
    else ST = "0"+ST
  N = N >> 1
end

现在字符串ST包含你想要的东西(如果你想要的话......)。

答案 1 :(得分:0)

如果你想保留前导零,你可以这样做。

StringBuilder sb = new StringBuilder();
String sep = "";
for (byte b : bytes) {
    sb.append(sep);
    // set the top byte bit to 0b1000_0000 and remove it from the String
    sb.append(Integer.toBinaryString(0x80 | (b & 0x7F)).substring(1));
    sep = '|';
}
String s = sb.toString();

答案 2 :(得分:0)

    byte[] array = { 0b00000011, 0b00111011, 0b01010101 };
    int result = 0;
    for (byte currentByte : array) {
        result <<= 7; // shift
        result |= currentByte & 0b0111_1111;
    }
    System.out.println(Integer.toBinaryString(result));

打印:

1101110111010101

如果您的数组超过4个字节,则可能会发生未检测到的int溢出。