Когда вы используете GetBytes из строки в Java, результат возврата будет зависеть от кодировки по умолчанию для вашего компьютера (например: StandardCharsetsUTF-8 или StandardCharsets.ISO_8859_1etc ...).
Итак, всякий раз, когда вы хотите получитьBytes из объекта String. Обязательно дайте кодировать. как:
String sample = "abc";
Byte[] a_byte = sample .getBytes(StandardCharsets.UTF_8);
Давай проверим, что случилось с кодом.
В java String с именем sample хранится в Unicode. каждый символ в строке хранится по 2 байта.
sample : value: "abc" in Memory(Hex): 00 61 00 62 00 63
a -> 00 61
b -> 00 62
c -> 00 63
Но, когда мы получаем байты из строки, мы имеем
Byte[] a_byte = sample .getBytes(StandardCharsets.UTF_8)
//result is : 61 62 63
//length: 3 bytes
Byte[] a_byte = sample .getBytes(StandardCharsets.UTF_16BE)
//result is : 00 61 00 62 00 63
//length: 6 bytes
Чтобы получить единственный байт строки. Мы можем просто прочитать память строки и получить каждый байт строки. Ниже приведен пример кода:
public static byte[] charArray2ByteArray(char[] chars){
int length = chars.length;
byte[] result = new byte[length*2+2];
int i = 0;
for(int j = 0 ;j<chars.length;j++){
result[i++] = (byte)( (chars[j] & 0xFF00) >> 8 );
result[i++] = (byte)((chars[j] & 0x00FF)) ;
}
return result;
}
Обычаи:
String sample = "abc";
//First get the chars of the String,each char has two bytes(Java).
Char[] sample_chars = sample.toCharArray();
//Get the bytes
byte[] result = charArray2ByteArray(sample_chars).
//Back to String.
//Make sure we use UTF_16BE. Because we read the memory of Unicode of
//the String from Left to right. That's the same reading
//sequece of UTF-16BE.
String sample_back= new String(result , StandardCharsets.UTF_16BE);