C# s BigInteger
обрабатывает массив байтов как прямой порядок байтов:
Параметры
значение Byte[]
Массив байтовых значений в обратном порядке.
В то время как Java BigInteger
обрабатывает байтовый массив как большой- endian:
Преобразует массив байтов, содержащий двоичное представление BigInteger с дополнением до двух, в BigInteger. Предполагается, что входной массив находится в байтовом порядке с прямым порядком байтов: самый значимый байт находится в нулевом элементе.
Поэтому вам нужно перевернуть массив байтов , чтобы получить тот же результат, что и на другом языке.
Также обратите внимание, что Java String.getBytes
использует кодировку по умолчанию, которая может не быть ASCII. Вы должны использовать
StandardCharsets.US_ASCII.encode("abc").array()
// or
"abc".getBytes(StandardCharsets.US_ASCII)
, чтобы получить тот же набор байтов, что и код C#.