Я знаю -, что в Java -int занимает 4 байта. Но я хочу скрыть массив байтов от int до n -, где n может быть 1, 2, 3 или 4 байта. Я хочу, чтобы это было подписанным байтом/байтом, так что, если мне нужно преобразовать их обратно в событие int (, если это был 1 байт ), я получаю тот же подписанный int. Я полностью осознаю возможность потери точности при преобразовании из int в 3 или меньшие байты.
Мне удалось преобразовать из int в n -байт, но преобразование его обратно для отрицательного числа дает беззнаковые результаты.
Изменить:
int to bytes (параметр n указывает необходимое количество байтов 1,2,3 или 4 независимо от возможной потери прецессии)
public static byte[] intToBytes(int x, int n) {
byte[] bytes = new byte[n];
for (int i = 0; i < n; i++, x >>>= 8)
bytes[i] = (byte) (x & 0xFF);
return bytes;
}
байтов в int (независимо от того, сколько байтов 1,2,3 или 4)
public static int bytesToInt(byte[] x) {
int value = 0;
for(int i = 0; i < x.length; i++)
value += ((long) x[i] & 0xffL) << (8 * i);
return value;
}
Вероятно, проблема в конвертере байтов в int.