Я пытаюсь преобразовать некоторые объекты BigInteger и математику из Java в C #.
Поток Java выглядит следующим образом:
1. Construct 2 BigIntegers from a base-10 string (i.e. 0-9 values).
2. Construct a third BigInteger from an inputted byte array.
3. Create a fourth BigInteger as third.modPow(first, second).
4. Return the byte result of fourth.
Основные сложности при преобразовании в C #, по-видимому, состоят из порядкового номера и значений со знаком / без знака.
Я пробовал пару разных способов конвертировать исходные 2 BigIntegers из Java-> C #. Я считаю, что использование строки base-10 с BigInteger.Parse будет работать, как и предполагалось, но я не совсем уверен.
Еще одно осложнение связано с использованием реализации BinaryReader / BinaryWriter в C #, которая уже имеет порядок байтов (например, Java). Я использую BR / BW для предоставления байтового массива для создания третьего BigInteger и использования байтового массива, созданного из modPow (четвертого BigInteger).
Я пытался полностью изменить байтовые массивы для ввода и вывода, но все еще не получил ожидаемый результат.
Java:
public static byte[] doMath(byte[] input)
{
BigInteger exponent = new BigInteger("BASE-10-STRING");
BigInteger mod = new BigInteger("BASE-10-STRING");
BigInteger bigInput = new BigInteger(input);
return bigInput.modPow(exponent, mod).toByteArray();
}
C #:
public static byte[] CSharpDoMath(byte[] input)
{
BigInteger exponent = BigInteger.Parse("BASE-10-STRING");
BigInteger mod = BigInteger.Parse("BASE-10-STRING");
// big->little endian
byte[] reversedBytes = input.Reverse().ToArray();
BigInteger bigInput = new BigInteger(reversedBytes);
BigInteger output = BigInteger.ModPow(bigInput, exponent, mod);
// little->big endian
byte[] bigOutput = output.ToByteArray().Reverse().ToArray();
return bigOutput;
}
Мне нужны одинаковые выходные данные для обоих.