Прошу прощения за запутанный заголовок, но я не мог понять, как описать мою проблему с лучшей.Преобразование из строки в длинный массив и обратно не работает
Я пишу программу, которая преобразует строку в длинный вектор, который должен быть обратимым (чтобы прочитать информацию назад). Мне кажется, что преобразование в длинный массив. Я использую 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;
}
Проблема заключается в том, что даже жесткая следующий код, как представляется точной инверсией кода выше, на самом деле это не так, а основание 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
?
Если вы хотите, я могу опубликовать тестовые примеры, которые я использую, чтобы попытаться проверить этот код.