将二进制字符串转换为ascii字符串,很长的路要走(没有API函数)

时间:2015-04-30 11:53:35

标签: java algorithm binary ascii

我最近接受了一次采访,发现我忘记了一些基础知识。我一直在玩,并编写了一个函数,它将采用二进制字符串(尚无验证)并返回所述字符串的ascii表示。

我正在寻求有关如何改进的建议或提示。我不想使用任何API函数,这更像是一个我可能能够学习的游乐场场景。

感谢您的帮助。

示例输出:

01101000 01100101 01101100 01101100 01101111 
104
101
108
108
111
hello



public static String convertBinaryStringToString(String string){
    StringBuilder sb = new StringBuilder();
    char[] chars = string.replaceAll("\\s", "").toCharArray();
    int [] mapping = {1,2,4,8,16,32,64,128};

    for (int j = 0; j < chars.length; j+=8) {
        int idx = 0;
        int sum = 0;
        for (int i = 7; i>= 0; i--) {
            if (chars[i+j] == '1') {
                sum += mapping[idx];
            }
            idx++;
        }
        System.out.println(sum);//debug
        sb.append(Character.toChars(sum));
    }
    return sb.toString();
}

2 个答案:

答案 0 :(得分:3)

您不需要具有2的幂的数组 - 计算机已经知道它们,您可以使用1<<k来获得2的k次幂。但是你也不需要。这是一个从char数组解析int的简短函数,char数组是数字的二进制表示。稍加修改后,代码将适用于最多10个基础。

public static int parseBinary(char[] chars) {
  int res = 0;
  for (int i = 0; i < s.length; ++i) {
    res *= 2;
    if (chars[i] == '1') {
      res += 1;
    }
  }
  return res;
}

使用此功能可以显着简化代码。

答案 1 :(得分:0)

如果你想要更多java8-ish解决方案:

public static String convertBinaryStringToString(String string) {
    return stream(string.split("\\s+"))
            .mapToInt(s -> s.chars().reduce(0, (x, y) -> (char) (x * 2 + (y-'0'))))
            .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
            .toString();
}