gpt4 book ai didi

java - 从字符串到长数组的转换并返回不起作用

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

我很抱歉标题令人困惑,但我想不出如何用更好的标题来描述我的问题。

我正在编写一个程序,将字符串转换为应该可逆的长 vector (以读回信息)。转换为长数组对我来说似乎没问题。我使用 base 64 作为中间步骤,以便以更好的方式生成字节数,以处理我必须执行的其他处理部分。

    public long[] str2long(String s)
{
final byte[] authBytes = s.getBytes(StandardCharsets.UTF_8);
final String encoded = Base64.getEncoder().encodeToString(authBytes);
long[] array = new long[encoded.length()];
int i=0;
for(char c: encoded.toCharArray()){
array[i] = (long) c;
// System.out.print(array[i] + " ");
i++;
}
return array;
}

问题是即使下面的代码看起来与上面的代码完全相反,但实际上它不是,并且 base 64 反向转换给出了这个错误:Illegal base64 character 5b .

public String long2str(long[] array)
{
char[] chArray = new char[array.length];
int i=0;
for(long c: array){
chArray[i] = (char) c;
i++;
}
String s = Arrays.toString(chArray);
final byte[] decoded= Base64.getDecoder().decode(s);
try {
s = new String(decoded, "UTF-8");
return s;
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(Encryption.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}

所以,我的问题是:

我缺少的第二种方法有什么不同?我认为它可能是 StandardCharsets.UTF_8,但我不确定。

如何让这个函数 long2str(long[] array)long2str(str2long(String s)) == String s ?

如果你愿意,我可以发布我正在使用的测试用例来尝试验证此代码。

最佳答案

在您的 long2str 方法中,更改:

String s = Arrays.toString(chArray);

到:

String s = new String(chArray);

当您使用 Arrays.toString() 时,您将获得 String 形式的 [Y, W, J, j, Z, G, V , m, Z, 2, h, ...],这不是有效的 base 64 字符串。要获取包含 chArray 所有字符的 String,您应该使用适当的 String 构造函数。

关于java - 从字符串到长数组的转换并返回不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27246542/

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