【问题标题】:Converting a binary string to an ascii string, the long way (No API Functions)将二进制字符串转换为 ascii 字符串,很长的路要走(无 API 函数)
【发布时间】:2015-07-10 02:48:26
【问题描述】:

我最近接受了一次采访,发现我忘记了一些基础知识。我一直在玩,并编写了一个函数,它将接受一个二进制字符串(还没有验证)并返回所述字符串的 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();
}

【问题讨论】:

  • 而且你不想使用 Integer.parseInt("10001001",2); ?
  • 我没有足够的经验在这里说一种或另一种方式(我不是 100% 确定 CR 需要多少代码)......但我认为可以暂时在这两个地方发帖。我的理由是,既然您希望改进工作代码,那么 CR 应该没问题。
  • @Trobbins,谢谢,我会在其他网站上发帖,一旦有事情发生,我会删除其中一个。 :)
  • 类似的帖子 [这里][1] 有多种答案和方法。 [1]:stackoverflow.com/questions/4211705/binary-to-text-in-java
  • @SteveGreen “我不想使用 API 函数。”你不是用Character.toChars 做的吗?

标签: java algorithm binary ascii


【解决方案1】:

您不需要具有 2 次方的数组 - 计算机已经知道它们,您可以使用 1&lt;&lt;k 来获得 2 的 k 次方。但是你也不需要那个。这是一个从 char 数组解析 int 的简短函数,该数组是数字的二进制表示。稍加修改,该代码将适用于最多 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;
}

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

【讨论】:

    【解决方案2】:

    如果您想要一个更类似于 java8 的解决方案:

    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();
    }
    

    【讨论】:

      猜你喜欢
      • 2014-06-14
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 1970-01-01
      相关资源
      最近更新 更多