Перевод большого числа в byte

134
06 июня 2019, 17:30

Делаю шифрование с помощью сдвигов битов в байте.Но если байту присвоить значение больше 127, оно начинает терять данные.Как правильно перевести большое число в байты без потери данных или чтобы его можно было потом восстановить?

Answer 1

В Java нет беззнаковых типов, но если вы хотите - можете сымитировать беззнаковый байт uint8 (хранит значения 0...255), вычитая 256 из чисел больше 127. Так вы будите использовать отрицательную область -128...-1.

Обратное преобразование int b = Byte.toUnsignedInt(a);

Это будет работать для чисел до 255. Больше чем 256 значений в один байт положить не получиться.

Чтобы перевести в байты числа больших размеров берите байты от типов short - 2 байта, int - 4 байта, или long - 8 байт. Отдельные байты можно получить методом битового сдвига.

Answer 2

Думаю для этих целей можно использовать BigInteger. Не думаю, что это оптимальный метод. В java вроде был api для шифрования и есть сторонние библиотеки. BigInteger можно перевести в массив байта путем вызова toByteArray(). Если есть знания английского или гугл переводчика https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html В дополнение комментария о сдвигах. В стандартной библиотеке нет циклических сдвигов для Byte. Но можно их реализовать на примере сдвигов для Integer из openjdk. rotateLeft и rotateRight методы.

READ ALSO
Бинарные деревья и изоморфность

Бинарные деревья и изоморфность

Лучший источник в данном примере указано, что

159
Запуск .jar файлов на линукс

Запуск .jar файлов на линукс

Не могу запустить программуjar формата в терминале, и в графическом интерфейсе

140
Простой Reader и Writer на Java, как лучше реализовать

Простой Reader и Writer на Java, как лучше реализовать

Всем добрый день, собственно есть задачаПрочитать файл с определенными словами

128