java - 字符串到二进制,反之亦然 : extended ASCII

标签 java string binary byte

我想通过将字符串放入字节数组 (String.getBytes[]) 中将其转换为二进制,然后存储每个字节的二进制字符串 (Integer.toBinaryString(bytearray) )) 在 String[] 中。然后我想通过 Byte.parseByte(stringarray[i], 2) 转换回普通字符串。这对于标准 ASCII 表非常有效,但对于扩展表则不然。例如,A 给我 1000001,但 Ä 返回

11111111111111111111111111000011
11111111111111111111111110000100

有什么想法如何管理这个吗?

public class BinString {
    public static void main(String args[]) {
        String s = "ä";
        System.out.println(binToString(stringToBin(s)));

    }

    public static String[] stringToBin(String s) {
        System.out.println("Converting: " + s);
        byte[] b = s.getBytes();
        String[] sa = new String[s.getBytes().length];
        for (int i = 0; i < b.length; i++) {
            sa[i] = Integer.toBinaryString(b[i] & 0xFF);
        }
        return sa;
    }

    public static String binToString(String[] strar) {
        byte[] bar = new byte[strar.length];
        for (int i = 0; i < strar.length; i++) {
            bar[i] = Byte.parseByte(strar[i], 2);
            System.out.println(Byte.parseByte(strar[i], 2));

        }
        String s = new String(bar);
        return s;
    }

}

最佳答案

首先:“扩展 ASCII”是一个非常具有误导性的标题,用于指代大量不同的编码。

第二:Java中的字节是有符号的,而编码中的字节通常被处理为无符号的。由于您使用 Integer.toBinaryString()byte 将使用符号扩展转换为 int(因为字节值 > 127 将表示为Java 中的负值)。

要避免这种情况,只需使用 & 0xFF 屏蔽除低 8 位之外的所有位,如下所示:

String binary = Integer.toBinaryString(byteArray[i] & 0xFF);

关于java - 字符串到二进制,反之亦然 : extended ASCII,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5535988/

相关文章:

java - float 属性在 HtmlWorker(iText) 中不起作用

c - 如何将 '\0' 存储在 char 数组中

c - 从 C 中的二进制文件读取数组返回不正确的值

c - 就地反转字符串时出现问题

c - 写入二进制文件

algorithm - 非恢复有符号整数除法后校正

Java processbuilder 在后台运行程序(.exe)

java - 有没有更好的方法来使用 Twitter4J 捕捉推文?

java - 帮助在 java 中进行 Mud 编程

JAVA - 对具有公共(public)字符串的数组列表中的成员进行计数?