我必须将sbyte数组转换为BigInteger。我在通用Windows平台上。 BigInteger构造函数只接受byte []而不接受sbyte []。 我不能使用byte [],因为在C#字节中默认是无符号的,并且我得到的值高于128。
sbyte数组是从字节数组转换的,因为当我比较C#返回的BigInteger值与Java中的值不同,因为默认情况下java使用有符号字节而c#使用unsigned。
任何解决方案? Java中的BigInteger:78214101938123633359912717791532276502 C中的BigInteger#30381787179362266836169791328776673082
编辑:我正在尝试从sbyte []数组创建一个BigInteger。我不是想将byte []转换为sbyte []
答案 0 :(得分: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[]
。这不是你想要的。