将二进制字符串转换为 ascii 字符串,很长的路要走(没有 API 函数)
Converting a binary string to an ascii string, the long way (No API Functions)
我最近参加了一次面试,发现我忘记了一些基础知识。我又玩了一遍,写了一个函数,它将接受一个二进制字符串(还没有验证)和 returns 所述字符串的 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 的幂的数组 - 计算机已经知道它们并且您可以使用 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;
}
使用此函数可以显着简化代码。
如果您想要更 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();
}
我最近参加了一次面试,发现我忘记了一些基础知识。我又玩了一遍,写了一个函数,它将接受一个二进制字符串(还没有验证)和 returns 所述字符串的 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 的幂的数组 - 计算机已经知道它们并且您可以使用 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;
}
使用此函数可以显着简化代码。
如果您想要更 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();
}