You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 09:40:04