Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getBytes有问题,如果最左边的位是1,下一位总是0_Java_Ascii - Fatal编程技术网

Java getBytes有问题,如果最左边的位是1,下一位总是0

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

经过大量的故障排除,我成功地使编码器和解码器工作,在这里我输入一个数字,它把它转换成二进制,然后ASCII,返回,我把它输入到另一个,它把ASCII转换成二进制,然后字符串一起转换成一个数字。这适用于所有看起来不像11xx xxxx的数字,因为它们变成了10xx xxxx

编码器:

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”);
结果=(结果)