我们说我有以下字符串:
String s = "Hello, stackoverflow"
如何将其转换为二进制数(0和1)?这就是诀窍:我不允许使用内置方法进行转换。它必须以数学方式完成。我不知道从哪里开始。有人能指出我正确的方向吗?
编辑1:我已经看到了这个question,人们建议使用getBytes(string),charset UTF-8和Integer.toBinaryString。我不允许使用任何这些方法进行转换。我也没有听说过36基地。
答案 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 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);
}
或者,如果不允许这样做,您最好自己制定解决方案。 : - )