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

时间:2014-03-31 04:43:43

标签: java string binary

我们说我有以下字符串:

String s = "Hello, stackoverflow"

如何将其转换为二进制数(0和1)?这就是诀窍:我不允许使用内置方法进行转换。它必须以数学方式完成。我不知道从哪里开始。有人能指出我正确的方向吗?

编辑1:我已经看到了这个question,人们建议使用getBytes(string),charset UTF-8和Integer.toBinaryString。我不允许使用任何这些方法进行转换。我也没有听说过36基地。

3 个答案:

答案 0 :(得分:2)

首先使用getByte()函数获取字节形式字符串,然后使用Integer.toBinaryString(byte)函数。 &安培;就是这样。

注意:〜确保Integer.toBinaryString(byte)接受int(或者在这种情况下字节不是全部。)所以你必须逐字节传递。(可能是for循环。)

已编辑:〜 你可以做的是用char&解析字符串char对于每个char,你可以使用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 :(得分:1)

您可以尝试这样: -

String s = "Hello, stackoverflow"
byte[] bytes = str.getBytes(s);

您可以查看java中的getBytes() method

  

使用命名的charset将此String编码为字节序列,   将结果存储到新的字节数组中。

     

此方法在此字符串无法编码时的行为   鉴于charset未指定。应该使用CharsetEncoder类   当需要更多地控制编码过程时。

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

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

答案 2 :(得分:1)

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

byte[] b = s.getBytes();

这是您问题的最短解决方案,但由于您不应该使用它,这是一个错误的方法:

使用String#charAt(int)

String s = "Hello, stackoverflow";
StringBuilder buf = new StringBuilder();
for (int i = 0; i < s.length(); i++ ) {
    int charcterASCII = 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);
}

或者,如果不允许这样做,您最好自己制定解决方案。 : - )