将字符串转换为二进制[Java]

4
假设我有以下字符串:
String s = "Hello, stackoverflow"

我该如何将其转换为二进制数(0和1)?这里有一个技巧:我不能使用内置的转换方法。必须通过数学方法完成。我不知道从哪里开始。有人能指点我吗?
编辑1:我看到了这个question,人们建议使用getBytes(string),字符集UTF-8和Integer.toBinaryString。我不能使用这些方法进行转换。我也没有听说过36进制。

复制 https://dev59.com/r3NA5IYBdhLWcg3wjOlS - bNd
没有内置方法,甚至没有 byte[] b = s.getBytes(); 吗? - Hungry Blue Dev
1
不包括getByes,字符集UTF-8或toBinaryString。 - user3479783
请检查我的更新答案。 - Pulah Nandha
1
当然,我们可以使用s.toCharArray(),或者至少是s.charAt(int)吧? - Hungry Blue Dev
3个回答

3

这似乎有点不公平,因为我们不能使用:

byte[] b = s.getBytes();

这是解决您问题的最短方案,但由于您不应该使用它,这里有一个不好的方法: 使用 String#charAt(int)
String s = "Hello, stackoverflow";
StringBuilder buf = new StringBuilder();
for (int i = 0; i < s.length(); i++ ) {
    int characterASCII = s.charAt(i);
    // Automatic type casting as 'char' is a type of 'int'
    buf.append(Integer.toBinaryString(characterASCII));
    // or:
    // buf.append(characterASCII, 2);
    // or - custom method:
    // buf.append(toBinary(characterASCII));
}
System.out.println("answer : " + buf.toString());

如果您决定使用toBinary(int)方法,这里是代码:

public static final String toBinary (int num) {
    char[] buf = new char[32];
    int charPos = 32;
    do {
        buf[--charPos] = i & 1;
        i >>>= 1;
    } while (i != 0);
    return new String(buf);
}

如果连这个都不允许,那最好自己想办法解决。:-)


2
首先使用getByte()函数从字符串中获取字节,然后使用Integer.toBinaryString(byte)函数即可。请注意:确保Integer.toBinaryString(byte)接受int(或在这种情况下是byte),因此您必须逐个字节传递它们(可以使用for循环)。编辑:您可以逐个字符解析字符串,并针对每个字符使用以下方法获取ascii值。
int tempChar = (int)ch;

然后简单地使用这个。
Integer.toString(tempChar,2);

试试这个。

string finalString = "";
for(int i = 0;i<myStr.length;i++){
    int tempChar = (int)ch;
    finalString = finalString + Integer.toString(tempChar,2);//& this is not allowed then now only you need to create function for integer to binary conversion.
}
System.out.println("Your byte String is"+finalString);

1
你可以尝试这样做:-
String s = "Hello, stackoverflow"
byte[] bytes = str.getBytes(s);

你可以查看Java中的getBytes()方法

使用指定的字符集将此字符串编码为字节序列,并将结果存储到新的字节数组中。

当此字符串无法在给定的字符集中进行编码时,此方法的行为是未指定的。如果需要对编码过程进行更多控制,则应使用CharsetEncoder类。

如果您想要每个字节的位:

for(int i=0; i<array.length;i++){
    System.out.println(Integer.toBinaryString(0x100 + array[i]).substring(1));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接