Преобразовать строку в байтовый массив, а затем обратно в исходную строку
Можно ли преобразовать строку в байтовый массив, а затем преобразовать ее обратно в исходную строку в Java или Android?
Моя цель - отправить несколько строк в микроконтроллер (Arduino) и сохранить их в EEPROM (который составляет всего 1 КБ). Я пытался использовать хеш MD5, но, похоже, это только одностороннее шифрование. Что я могу сделать, чтобы решить эту проблему?
6 ответов
Я бы предложил использовать члены строки, но с явной кодировкой:
byte[] bytes = text.getBytes("UTF-8");
String text = new String(bytes, "UTF-8");
Используя явную кодировку (и ту, которая поддерживает все Unicode), вы избегаете проблем простого вызова text.getBytes()
так далее:
- Вы явно используете конкретную кодировку, так что вы знаете, какую кодировку использовать позже, вместо того, чтобы полагаться на платформу по умолчанию.
- Вы знаете, что он будет поддерживать весь Unicode (в отличие, скажем, от ISO-Latin-1).
РЕДАКТИРОВАТЬ: Даже если UTF-8 является кодировкой по умолчанию на Android, я бы определенно был прямо об этом. Например, этот вопрос говорит только "на Java или Android" - так что вполне возможно, что код в конечном итоге будет использоваться на других платформах.
В основном, учитывая, что нормальная платформа Java может иметь разные кодировки по умолчанию, я думаю, что лучше быть абсолютно явным. Я видел слишком много людей, использующих кодировку по умолчанию и теряющих данные, чтобы пойти на такой риск.
РЕДАКТИРОВАТЬ: в спешке я забыл упомянуть, что вам не нужно использовать имя кодировки - вы можете использовать Charset
вместо. Используя Guava, я бы действительно использовал:
byte[] bytes = text.getBytes(Charsets.UTF_8);
String text = new String(bytes, Charsets.UTF_8);
Вы можете сделать это так.
Строка в байтовый массив
String stringToConvert = "This String is 76 characters long and will be converted to an array of bytes";
byte[] theByteArray = stringToConvert.getBytes();
http://www.javadb.com/convert-string-to-byte-array
Байтовый массив в строку
byte[] byteArray = new byte[] {87, 79, 87, 46, 46, 46};
String value = new String(byteArray);
Использование [String.getBytes()][1]
преобразовать в байты и использовать [String(byte[] data)][2]
Конструктор для преобразования обратно в строку.
Проверьте это, вы можете использовать Base85: Base85 aka ASCII85 Java-проекты
Был такой же вопрос.
import java.io.FileInputStream; import java.io.ByteArrayOutputStream;
public class FileHashStream {// напишите новый метод, который предоставит новый байтовый массив, и где он обычно читает из входного потока
public static byte[] read(InputStream is) throws Exception
{
String path = /* type in the absolute path for the 'commons-codec-1.10-bin.zip' */;
// must need a Byte buffer
byte[] buf = new byte[1024 * 16]
// we will use 16 kilobytes
int len = 0;
// we need a new input stream
FileInputStream is = new FileInputStream(path);
// use the buffer to update our "MessageDigest" instance
while(true)
{
len = is.read(buf);
if(len < 0) break;
md.update(buf, 0, len);
}
// close the input stream
is.close();
// call the "digest" method for obtaining the final hash-result
byte[] ret = md.digest();
System.out.println("Length of Hash: " + ret.length);
for(byte b : ret)
{
System.out.println(b + ", ");
}
String compare = "49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d";
String verification = Hex.encodeHexString(ret);
System.out.println();
System.out.println("===")
System.out.println(verification);
System.out.println("Equals? " + verification.equals(compare));
}
}
byte[] pdfBytes = Base64.decode(myPdfBase64String, Base64.DEFAULT)