Java getBytes有问题,如果最左边的位是1,下一位总是0
经过大量的故障排除,我成功地使编码器和解码器工作,在这里我输入一个数字,它把它转换成二进制,然后ASCII,返回,我把它输入到另一个,它把ASCII转换成二进制,然后字符串一起转换成一个数字。这适用于所有看起来不像11xx xxxx的数字,因为它们变成了10xx xxxx 编码器:Java getBytes有问题,如果最左边的位是1,下一位总是0,java,ascii,Java,Ascii,经过大量的故障排除,我成功地使编码器和解码器工作,在这里我输入一个数字,它把它转换成二进制,然后ASCII,返回,我把它输入到另一个,它把ASCII转换成二进制,然后字符串一起转换成一个数字。这适用于所有看起来不像11xx xxxx的数字,因为它们变成了10xx xxxx 编码器: public static String convert(int number) { String binary = Integer.toBinaryString(number); String st
public static String convert(int number) {
String binary = Integer.toBinaryString(number);
String string = "";
byte[] bytes = new byte[4];
while (binary.length() < 32) {
binary = "0" + binary;
}
for (int i = 0; i < bytes.length; i++) {
string += (char) Integer.parseInt(binary.substring(i * 8, (i + 1) * 8), 2);
}
return string;
}
公共静态字符串转换(整数){
字符串二进制=整数。toBinaryString(数字);
字符串=”;
字节[]字节=新字节[4];
while(binary.length()<32){
binary=“0”+二进制;
}
for(int i=0;i
解码器:
public static int convert(String message) {
byte[] bytes = new byte[message.length()];
try {
for (int i = 0; i < message.length(); i++) {
bytes[i] = (message.substring(i, i + 1).getBytes("UTF-8"[message.substring(i, i + 1).getBytes("UTF-8").length - 1]);
}
StringBuilder binary = new StringBuilder(32);
String s;
for (int i = 0; i < bytes.length; i++) {
s = Integer.toBinaryString(bytes[i] & 0xFF);
while (s.length() < 8)
s = "0" + s;
binary.append(s);
}
int result = 0;
result = Integer.parseInt(binary.toString(), 2);
return result;
} catch (UnsupportedEncodingException e) {
return -1;
}
}
公共静态整数转换(字符串消息){
byte[]bytes=新字节[message.length()];
试一试{
对于(int i=0;i
您误解了字符编码的作用。请用解码器中的getBytes()扔掉所有内容
getBytes()编码为UTF-8,UTF-8不是每个字符一个字节。如果在编码器中每个字符编码一个字节,则在解码器中每个字符解码一个字节
顺便说一句,您的编码器是危险的卷积。简单的版本是直接将int分解为字节并转换为char:
String encode(int i) {
char[] result = new char[4];
char[0] = (char) (i >>> 24);
char[1] = (char) ((i >> 16) & 0xFF);
char[2] = (char) ((i >> 8) & 0xFF);
char[3] = (char) (i & 0xFF);
return new String(result);
}
解码器也可以简单得多:
int decode(String s) {
int result = 0;
for (int i=0; i<s.length; ++i) {
char c = s.charAt(i);
if (c > 255)
throw new IllegalArgumentException("invalid character: " + c);
result = (result << 8) | (c & 0xFF);
}
return result;
}
int解码(字符串s){
int结果=0;
对于(int i=0;i 255)
抛出新的IllegalArgumentException(“无效字符:+c”);
结果=(结果)