- Java – Как преобразовать байт в двоичную строку
- Байт -> Int -> Двоичный
- Рекомендации
- Читайте ещё по теме:
- Programming for beginners
- Converting Java byte to binary string
- Java byte to binary conversion
- output :
- How can I convert a binary string to a byte?
- Convert binary string to byte-Array in Java
- How to convert binary string to the byte array of 2 bytes in java
Java – Как преобразовать байт в двоичную строку
В Java мы можем использовать целое число.toBinaryString(int) для преобразования байта в двоичную строку. Сначала преобразуйте байт в беззнаковую маску int и 0xff.
В 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 – Преобразование отрицательного двоичного кода в целое число
Читайте ещё по теме:
Programming for beginners
package com.sample.app; public class App public static void main(String args[]) byte b1 = (byte) 255; String s1 = String.format("%8s", Integer.toBinaryString(b1 & 0xFF)).replace(' ', '0'); byte b2 = (byte) 127; String s2 = String.format("%8s", Integer.toBinaryString(b2 & 0xFF)).replace(' ', '0'); System.out.println("255 in binary : " + s1); System.out.println("127 in binary : " + s2); > >
Converting Java byte to binary string
To convert a string into a byte array of length 2, I referred to a link for guidance and attempted several methods. One approach involved first converting the string into decimal and then using code to store it into the byte array. Another approach I tried resulted in an exception being thrown. To obtain a byte array of 2 bytes, I am wondering if there is an inbuilt function in the programming language that can be used. The solution provided by someone else confirmed that my current answer is correct.
Java byte to binary conversion
I have a few questions based on the statements I provided. Kindly provide an explanation.
Is there a reason why the output for items 2 and 4 are identical? My assumption is that this is due to byte 128 being equivalent to byte -128.
What is the reason for adding 1s on the left side of the output for items 2 and 4? The expected output is simply 10000000, I presume.
What distinguishes outputs 2 and 3 despite their identical last 8 bits?
1. System.out.println("1==>"+Integer.toBinaryString((byte)127)); 2. System.out.println("2==>"+Integer.toBinaryString((byte)128)); 3. System.out.println("3==>"+Integer.toBinaryString(128)); 4. System.out.println("4==>"+Integer.toBinaryString((byte)-128));
output :
1==>1111111 2==>11111111111111111111111110000000 3==>10000000 4==>11111111111111111111111110000000
In Java, a signed 8-bit integer represented by byte can only hold values between -128 and 127.
The value 128 experiences an overflow and results in transforming into -128.
The method returns «the argument plus 2^32» for negative numbers, which leads to many leading 1s. Conversely, positive numbers simply exclude the leading 0 .
In the third example, byte is not utilized and instead, int is used. Therefore, it allows the representation of 128 without causing an overflow.
Java Convert Decimal to Binary, The Integer.toBinaryString() method converts decimal to binary string. The signature of toBinaryString() method is given below: public
How can I convert a binary string to a byte?
I’m working on Huffman compression.
String binaryString = "01011110"; outFile.write(byte);
I need to transform a String into a byte to enable me to write it to a file. Can someone assist me in achieving this?
By utilizing the overloaded parseByte , you have the ability to specify the radix and transform String into a numerical value.
String binaryString = "01011110"; byte b = Byte.parseByte(binaryString, 2); //this parses the string as a binary number outFile.write(b);
The parseByte() function’s second parameter allows you to indicate the desired Number system for the String parsing. Normally, a radix of 10 is applied as humans commonly use the decimal system. However, if the value is binary (i.e., base 2), you can set the radix to 2.
By setting the radix to 2, Byte.parseByte() can be utilized.
byte b = Byte.parseByte(str, 2);
System.out.println(Byte.parseByte("01100110", 2));
It is possible to manually write a String[256] with each set of 8 bits of 1 and 0 and use String.indexOf(binnum[arrayIndex]) to verify. Additionally, you can create a corresponding new byte[256] array and set each element in the same order using new Integer(increment).byteValue(). To check for printability over byte[] array , use new Byte(bytarray[incr]).intValue()+»\n». This method only requires 256 entries.
How to convert byte array to string and vice versa?, // Code to convert byte arr to str: byte[] by_original = <0,1,-2,3,-4,-5,6>; String str1 = new String(by_original); System.out.println(«str1 >> «+str1); // Code0,1,-2,3,-4,-5,6>
Convert binary string to byte-Array in Java
My objective is to divide binary string into segments of 8 characters each and save the relevant bytes in byte-Array . As an illustration, the sequence «0000000011111111» should be transformed into the set of . To achieve this outcome, I have created this function thus far:
public static byte[] splitBinary(String binaryString) throws ConversionException < if (binaryString.length()%8 != 0) < throw new ConversionException(); >byte[] result = new byte[binaryString.length()/8]; while (i < result.length) < result[i] = (byte) (Integer.parseInt(binaryString.substring(i, i+8), 2)-128); i+=8; >return result; >
How can I obtain the intended functionality, given that it yields ?
After making modifications to the function and adjusting my expectations accordingly, it is now functioning as intended. I am grateful to everyone who helped me with this.
public static byte[] splitBinaryStringToByteArray(String binaryString) throws ConversionException < if (binaryString.length()%8 != 0) < throw new ConversionException(); >byte[] result = new byte[binaryString.length()/8]; int i =0;int j=0; while (i < binaryString.length()) < System.out.println("Substring: " + binaryString.substring(i, i+8)); result[j] =((byte)Integer.parseInt((binaryString.substring(i, i+8)), 2)); j++; i+=8; >return result; >
Your splitting routine is wrong.
Incrementing i by 1 shifts the window to the right by one character, instead of two, causing the strings 00000000 and 00000001 to be read.
In regard to the size of the result, it may be smaller compared to that of binaryString , however, when using binaryString.substring(i, i+8) and i+=8 , you should consider the size of binaryString . To resolve this, switch to binaryString.substring(i*8, i*8+8) and i++ .
Converting Between Byte Arrays and Hexadecimal Strings in Java, The bytes are 8 bit signed integers in Java. Therefore, we need to convert each 4-bit segment to hex separately and concatenate them.
How to convert binary string to the byte array of 2 bytes in java
I possess a binary string with the label String A = «1000000110101110» and my objective is to transform it into byte array which should have a length of 2 according to java .
I have taken the help of this link
I have attempted to transform it into a byte using multiple methods.
- Initially, the string was converted to decimal before executing the code for storing it in the byte array.
int aInt = Integer.parseInt(A, 2); byte[] xByte = new byte[2]; xByte[0] = (byte) ((aInt >> 8) & 0XFF); xByte[1] = (byte) (aInt & 0XFF); System.arraycopy(xByte, 0, record, 0, xByte.length);
The byte array stores negative values.
byte[] xByte = ByteBuffer.allocate(2).order(ByteOrder.BIG_ENDIAN).putInt(aInt).array();
However, an exception is thrown at the aforementioned line.
java.nio.Buffer.nextPutIndex(Buffer.java:519) at java.nio.HeapByteBuffer.putInt(HeapByteBuffer.java:366) at org.com.app.convert.generateTemplate(convert.java:266)
Is there a built-in function in java that I can use to convert a binary string into a 2-byte byte array? What steps should I take to perform this conversion?
The answer you are getting
The representation is known as 2’s complement where the first bit serves as a signed bit.
If the first bit is 0, the calculation is regular. However, if the first bit is 1, the resulting value is negative, which is obtained by subtracting the value of the 7 bits from 128.
For your scenario, the initial value is represented by 10000001 . This means that the first bit corresponds to a negative value, while the last seven bits (128-1) equal 127. Therefore, the resulting value is -127.
For further information, refer to the representation of 2’s complement.
To store a two byte value, utilize putShort . However, if you need to store four bytes, use int .
// big endian is the default order byte[] xByte = ByteBuffer.allocate(2).putShort((short)aInt).array();
Just a heads up, your initial try is flawless. However, it’s impossible to modify the negative sign of the bytes since the foremost bit of these bytes is consistently designated as the most significant and recognized as a negative value.
String s = "1000000110101110"; int i = Integer.parseInt(s, 2); byte[] a = > 8), (byte) i>; System.out.println(Arrays.toString(a)); System.out.print(Integer.toBinaryString(0xFF & a[0]) + " " + Integer.toBinaryString(0xFF & a[1]));
The values -127 and -82 can be represented in binary as 0xb10000001 and 0xb10101110, respectively.
Signed 8-bit integers are represented in bytes and your outcome is accurate. It’s worth noting that 01111111 equals 127, whereas 10000000 is equal to -128. To obtain values within the range of 0-255, a larger variable type such as a short needs to be utilized.
Here’s how you can represent an unsigned byte when printing it.
public static String toString(byte b)
Convert binary string to byte-Array in Java, @SandeepKumar OP wrote should be convertert to <-128, 127>· i+=8 in for loop · Yes: the input is the string «0000000011111111» and the output-128,>