gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:55:25 25 4
gpt4 key购买 nike

经过大量故障排除后,我设法让编码器和解码器工作,我输入一个数字,它将它转换为二进制,然后是 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;
}

解码器:

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;
}
}

最佳答案

你误解了字符编码的作用。在解码器中使用 getBytes() 丢弃所有内容。

getBytes() 编码为 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;
}

所有的中间转换只会让代码更加困惑和容易出错。

关于java - getBytes 的问题,如果最左边的位是 1,下一位总是 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33349616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com