Я сталкивался с этим способом кодирования целого числа в байтах. Строка
public String intToString(int x) {
char[] bytes = new char[4];
for(int i = 3; i > -1; --i) {
bytes[3 - i] = (char) (x >> (i * 8) & 0xff);
}
return new String(bytes);
}
Я не совсем понял, почему мы выполняем итерацию в этом порядке
(x >> (24) & 0xff); //stored in bytes[0]
(x >> (16) & 0xff); //stored in bytes[1]
(x >> (8) & 0xff); //stored in bytes[2]
(x >> (0) & 0xff); //stored in bytes[3]
, а не наоборот round
Используется для декодирования
public int stringToInt(String bytesStr) {
int result = 0;
for(char b : bytesStr.toCharArray()) {
result = (result << 8) + (int)b;
}
return result;
}
Я знаю, что & 0xff
используется для маскировки и сбора 8 битов за раз. Я просто не знаю, почему это в таком порядке? Кто-нибудь может объяснить? Спасибо.