Рубрики
Без рубрики

Java – Как преобразовать байт в двоичную строку

В Java мы можем использовать целое число.toBinaryString(int) для преобразования байта в двоичную строку. Сначала преобразуйте байт в беззнаковую маску int и 0xff.

Автор оригинала: mkyong.

В Java мы можем использовать Целое число.тоБинариСтринг(int) для преобразования байта в двоичный строковый представитель. Просмотрите Целое число.toBinaryString(int) сигнатура метода, он принимает целое число в качестве аргумента и возвращает строку.

public final class Integer extends Number
        implements Comparable, Constable, ConstantDesc {

          public static String toBinaryString(int i) {
            return toUnsignedString0(i, 1);
          }

          //...
}

Если мы передадим байт в этот метод, Java автоматически приведет/| к расширению байта до int |/и применит расширение знака . Если нам не нужно расширение знака, замаскируйте его (побитовое и) с помощью 0xff . Чтобы лучше понять предыдущее утверждение, пожалуйста, прочтите это Как преобразовать байт в байт без знака в Java .

Байт -> Int -> Двоичный

Этот пример Java выведет байт в двоичную строку и дополнит начало нулем.

package com.mkyong.crypto.bytes;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class ByteToBinary {

    public static void main(String[] args) {

        byte aByte = (byte) -2;                                                         // -2 (signed) and 254 (unsigned)
        System.out.println("Input : " + aByte);

        // byte to an unsigned integer
        // & 0xff to prevent sign extension, no effect on positive
        int result = aByte & 0xff;

        System.out.println(result);                                                     // 254
        System.out.println(Integer.toBinaryString(result));                             // 1111 1110

        String resultWithPadZero = String.format("%32s", Integer.toBinaryString(result))
                .replace(" ", "0");

        System.out.println(resultWithPadZero);                                          // 00000000000000000000000011111110
        System.out.println(printBinary(resultWithPadZero, 8, "|"));                     // 00000000|00000000|00000000|11111110

    }

    // pretty print binary with separator
    public static String printBinary(String binary, int blockSize, String separator) {

        // split by blockSize
        List result = new ArrayList<>();
        int index = 0;
        while (index < binary.length()) {
            result.add(binary.substring(index, Math.min(index + blockSize, binary.length())));
            index += blockSize;
        }

        return result.stream().collect(Collectors.joining(separator));
    }

}

Выход

Input : -2
254
11111110
00000000000000000000000011111110
00000000|00000000|00000000|11111110

Для Java 8 мы можем использовать новый API для преобразования байта в unsigned int.

  int result = Byte.toUnsignedInt(aByte);

Рекомендации

Оригинал: “https://mkyong.com/java/java-how-to-convert-a-byte-to-a-binary-string/”