java 将二进制输入读取为 49,48

java read binary input as 49,48

提问人:NoamiA 提问时间:10/4/2023 更新时间:10/4/2023 访问量:51

问:

我收到此输入10010011 00000001 跟:

byte[] binaryInput = new byte[1024];
int bytesReadinput = System.in.read(binaryInput);

// Create a ByteArrayInputStream object for the binary input.
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(binaryInput, 0, bytesReadinput);

为什么 java 将输入获取为 49,48,48,48,49,49,32,48,48,48,48,48,48,48,49

以及如何将其更改为实际的二进制值?0x93 0x01 ?

Java Maven 输入 二进制 字节

评论

4赞 g00se 10/4/2023
你有一些基本的理解问题(可能)。首先,您需要说明您输入的内容和方式。请记住,49 和 48 是 1 和 0 的十进制 ASCII 值。两个二进制字符串中的每一个都需要 8 个字节而不是位
0赞 NoamiA 10/4/2023
那么我怎样才能将输入读取为位
0赞 g00se 10/4/2023
好吧,你没有回答我的问题,所以我不能建议
0赞 NoamiA 10/4/2023
我从带有二进制数据的文件中获取此文件
1赞 g00se 10/4/2023
你的意思是一个带有 1 和 0 的文本文件?如果是这样,它是如何格式化的

答:

-1赞 g00se 10/4/2023 #1

您可能需要这样的东西,基于您的我从带有二进制数据的文件中得到它

    public static byte[] parseBitsFile(String path) throws IOException {
        String s = Files.readString(Path.of(path)).replaceAll("[^01]", "");
        byte[] result = new byte[s.length() / 8];
        StringReader sr = new StringReader(s);
        char[] byteVal = new char[8];
        int ix = 0;
        while(sr.read(byteVal) > -1) {
            result[ix++] = (byte)Integer.parseInt(String.valueOf(byteVal), 2);
        }
        return result;
    }

上面假设将整个文件读入内存不是问题