Автор оригинала: 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 Listresult = 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);
Рекомендации
- Примитивные типы данных Oracle – Java
- Википедия – дополнение для двоих
- Расширение знака Java
- Java – байт в байт без знака .
- Java – Преобразование отрицательного двоичного кода в целое число
Оригинал: “https://mkyong.com/java/java-how-to-convert-a-byte-to-a-binary-string/”