【问题标题】:Convert an array of integers (or string) of binary 1s and 0s to their alpha equivalent in Java将二进制 1 和 0 的整数(或字符串)数组转换为它们在 Java 中的 alpha 等效项
【发布时间】:2019-08-11 11:48:18
【问题描述】:

我有一个整数 1 和 0 的数组(可能需要转换为 byte 类型?)。我已经使用 [一个在线 ASCII 到二进制生成器][1] 来获得这个 6 位字母序列的等效二进制:

abcdef 应该等于二进制的011000010110001001100011011001000110010101100110

我的数组设置为int[] curCheckArr = new int[48];,我的字符串基本上只是使用StringBuilder 来构建与字符串相同的整数,并调用toString() - 所以我可以将代码作为字符串或数组访问.

我尝试了几种不同的方法,所有这些方法都会导致浏览器崩溃,包括:

StringBuilder curCheckAlphaSB = new StringBuilder(); // Some place to store the chars

Arrays.stream( // Create a Stream
    curCheckString.split("(?<=\\G.{8})") // Splits the input string into 8-char-sections (Since a char has 8 bits = 1 byte)
).forEach(s -> // Go through each 8-char-section...
curCheckAlphaSB.append((char) Integer.parseInt(s, 2)) // ...and turn it into an int and then to a char
);

String curAlpha = curCheckAlphaSB.toString();

String curAlpha = "";

for (int b = 0; b < curCheckString.length()/8; b++) {

    int a = Integer.parseInt(curAlpha.substring(8*b,(b+1)*8),2);
    curAlpha += (char)(a);
}

如何最有效地将这 48 个 1 和 0 转换为六位字母字符序列?

【问题讨论】:

    标签: java arrays binary ascii


    【解决方案1】:

    假设每个字符恰好由一个 byte 表示,您可以使用 Integer.parseInt() 迭代输入(因为输入中的 byte 值可能是无符号的):

    String input = "011000010110001001100011011001000110010101100110";
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < input.length(); i += 8) {
        int c = Integer.parseInt(input.substring(i, i + 8), 2);
        sb.append((char) c);
    }
    System.out.println(sb); // abcdef
    

    【讨论】:

    • 您可能需要使用Integer.parseInt 来避免签名问题。
    • 谢谢你们,已修复。
    【解决方案2】:

    使用正则表达式可能是其中最慢的部分。使用预编译的正则表达式会有所帮助,但子字符串更快。除了结果之外不创建任何字符串会更快。例如使用 StringBuilder 而不是 += 作为字符串。

    【讨论】:

      猜你喜欢
      • 2017-04-25
      • 1970-01-01
      • 2019-11-24
      • 2016-01-01
      • 2021-08-05
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 2018-10-05
      相关资源
      最近更新 更多