【问题标题】:C# sbyte array to BigIntegerC# sbyte 数组到 BigInteger
【发布时间】:2015-11-13 12:15:46
【问题描述】:

我必须将 sbyte 数组转换为 BigInteger。我在通用 Windows 平台上。 BigInteger 构造函数只接受 byte[] 而不是 sbyte[]。 我不能使用 byte[],因为在 C# 中,默认情况下字节是无符号的,并且我得到的值高于 128。

sbyte 数组是从字节数组转换而来的,因为当我比较 C# 返回的 BigInteger 值与 Java 中的值不同时,Java 默认使用有符号字节,而 c# 使用无符号。

任何解决方案? Java中的BigInteger:78214101938123633359912717791532276502 C# 中的 BigInteger 30381787179362266836169791328776673082

编辑:我正在尝试从 sbyte[] 数组中创建一个 BigInteger。我不想将 byte[] 转换为 sbyte[]

【问题讨论】:

  • 既然可以复制/粘贴,为什么还要截图?
  • 翻转你的字节数组。 Java 使用 Big-Endian,C#(很可能)使用 little-endian。更多信息:Wikipedia
  • 我将我的 byte[] 数组翻转为 sbyte[] 但现在我需要从 sbyte[] 创建 BigInteger 并且 BigInteger 构造函数不接受 sbyte[]
  • 我没有尝试将 byte[] 转换为 sbyte[] ,它已经完成,我正在尝试从 sbyte[] 而不是 byte[] 创建 BigInteger,但我无法

标签: c# type-conversion byte biginteger


【解决方案1】:

翻转你的字节数组。不要投到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[]。这不是你想要的。

【讨论】:

  • 我怎么能... 非常感谢,我以为这个 little-endian 的东西与转换或什么有关
  • 有符号或无符号与小端或大端无关。 sbyte[] 转换仅将无符号重新解释为有符号。它不会反转整个数组。
猜你喜欢
  • 2015-08-21
  • 1970-01-01
  • 2014-07-20
  • 2011-03-12
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多