2015-11-13 4 views
0

enter image description here Мне нужно преобразовать массив sbyte в BigInteger. Я на универсальной платформе Windows. Конструктор BigInteger принимает только байты [], а не sbyte []. Я не могу использовать byte [], поскольку в байте C# по умолчанию нет знака, и я получаю более высокие значения, чем 128.C# массив sbyte для BigInteger

Массив sbyte преобразуется из массива байтов, потому что когда я сравниваю значение BigInteger, возвращаемое C#, отличается от значение в Java, поскольку java по умолчанию использует подписанные байты, а C# использует unsigned.

Любое решение? BigInteger в Java: 78214101938123633359912717791532276502 BigInteger в C# 30381787179362266836169791328776673082

Edit: Я пытаюсь сделать BigInteger из SByte [] массива. Я не пытаюсь преобразовать байт [] в sbyte []

+0

Почему скриншот, когда вы можете копировать/вставлять? –

+2

Переверните массив байтов. Java использует Big-Endian, C# (скорее всего) использует little-endian. Дополнительная информация: [Википедия] (https://en.wikipedia.org/wiki/Endianness) –

+1

Возможный дубликат [Как преобразовать sbyte \ [\] в byte \ [\] в C#?] (Http: // stackoverflow.com/questions/829983/how-to-convert-a-sbyte-to-byte-in-c) –

ответ

2

Переверните массив байтов. Не бросайте в sbyte[]. Используйте byte[].

Вот ваши ценности, как массивы (опалены и без знака):

Java значения (подпись): 58, -41, 124, -12, 24, 102, 14, 93, 79, -102, 72, 47, -62, 81, -37, 22 значения Java (без знака): 58, 215, 124, 244, 24, 102, 14, 93, 79, 154, 72, 47, 194, 81, 219, 22

C# значения (подпись): 22, -37, 81, -62, 47, 72, -102, 79, 93, 14, 102, 24, -12, 124, -41, 58
значения C# (без знака): 22, 219, 81, 194, 47, 72, 154, 79, 93, 14, 102, 24, 244, 124, 215, 58

Посмотрите на Endianess. Как указывалось ранее, Java использует big-endian, C# использует little-endian. Для этого переверните byte[] и прекратите отливать его в sbyte[]. Это не то, что вы хотите.

+0

Как я могу ... Большое спасибо, я думал, что это малодушное дело связано с конверсией или чем-то –

+0

Подписано или без знака не имеет ничего общего с маленьким или большим эндиантом. Преобразование sbyte [] только повторно интерпретирует unsigned как подписанное. Он не отменяет весь массив. –