Java读取二进制字符输入为何得到ASCII码?如何转成实际二进制值?
为什么System.in.read返回ASCII码值,以及如何将输入的二进制字符串转为实际字节值
为什么得到的是49,48,...这些数值?
你输入的10010011 00000001是文本形式的二进制字符,System.in.read()读取的是每个字符对应的ASCII编码值:
- 字符
'1'的ASCII码是49 - 字符
'0'的ASCII码是48 - 空格字符的ASCII码是32
所以你看到的数组就是输入字符串里每个字符的ASCII码依次排列的结果。
转换为实际二进制字节的方法
要把文本形式的二进制字符串转成对应的字节值,需要先把读取到的字节数组转成字符串,再分割处理每个二进制片段,最后解析为字节:
步骤1:将读取到的字节数组转为字符串
先把binaryInput里的有效部分转成字符串,同时去掉可能的换行符或多余空格:
String inputStr = new String(binaryInput, 0, bytesReadinput).trim();
步骤2:分割二进制片段
按空格分割成两个8位的二进制字符串:
String[] binaryParts = inputStr.split("\\s+");
步骤3:解析每个二进制字符串为字节
Java的byte是有符号类型(范围-128到127),10010011对应的十进制是147,超过了byte的正范围,所以需要用Integer.parseInt解析后强转成byte(自动处理补码,结果对应十六进制0x93);而00000001在byte范围内,可直接用Byte.parseByte:
byte firstByte = (byte) Integer.parseInt(binaryParts[0], 2); // 对应0x93 byte secondByte = Byte.parseByte(binaryParts[1], 2); // 对应0x01
完整示例代码
import java.io.ByteArrayInputStream; import java.io.IOException; public class BinaryInputConverter { public static void main(String[] args) throws IOException { byte[] binaryInput = new byte[1024]; int bytesReadinput = System.in.read(binaryInput); // 转换为字符串并清理 String inputStr = new String(binaryInput, 0, bytesReadinput).trim(); String[] binaryParts = inputStr.split("\\s+"); // 解析为字节 byte firstByte = (byte) Integer.parseInt(binaryParts[0], 2); byte secondByte = Byte.parseByte(binaryParts[1], 2); // 验证结果(十六进制输出) System.out.printf("第一个字节:0x%02X%n", firstByte); // 输出0x93 System.out.printf("第二个字节:0x%02X%n", secondByte); // 输出0x01 // 创建目标ByteArrayInputStream ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(new byte[]{firstByte, secondByte}); } }
内容的提问来源于stack exchange,提问作者NoamiA
相关产品推荐
相关产品推荐

