2016-12-29 10 views
1

У меня есть массив байтов, например (массив байтов может быть больше или меньше, чем 3 байта)Удалить последний бит байта

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

Как я могу удалить последний бит байт: 0b 0000011, 0b 0111011, 0b , потому что я хочу, чтобы получить результат, как этот 11 | 0111011 | 1010101 , но я понятия не имею, как это сделать

+1

Прежде всего, шестнадцатеричное обозначение 0xXXXXXX. Вместо этого используйте 0bXXXXX. Во-вторых, вы должны использовать побитовые операторы: & (1010 и 1100 -> 1000), | (1010 | 1100 -> 1110),^(1010^1100 -> 0110) и двоичные сдвиги (>> и <<: 10101100>> 2 -> 00101011). –

+0

Так что 'myByte & 0b01111111' сохранит только последние 7 бит' myByte'. Результатом может быть «int», если да, просто верните его в байт: '(byte) (myByte & 0b01111111)' –

+0

Вы хотите, чтобы ваш результат был в 'int',' String'or как? –

ответ

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 содержит то, что вы хотите (если это то, что вы хотите ...).

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(); 
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 байта, необнаруженная переполнение ИНТ, скорее всего.

Смежные вопросы