C# .NET System.Numerics.BigInteger与Org.BouncyCastle.Math.BigInteger.ToByteArrayUnsigned的等价物是什么?

C# .NET System.Numerics.BigInteger与Org.BouncyCastle.Math.BigInteger.ToByteArrayUnsigned的等价物是什么?,c#,.net-4.5,bouncycastle,biginteger,system.numerics,C#,.net 4.5,Bouncycastle,Biginteger,System.numerics,我目前正在使用,在使用本机.NETbiginger将大整数转换为System.Guid时遇到一些问题 对于某些上下文,我在一个(“源”)应用程序中使用BouncyCastle将System.Guid转换为Org.BouncyCastle.Math.BigInteger。然后将该值保存为字符串,格式为3A2B847A960F0E4A8D49BD62DDB6EB38 然后,在另一个(“目的地”)应用程序中,我获取保存的biginger字符串值,并尝试将其转换回System.Guid 请注意,在目标应

我目前正在使用,在使用本机.NET
biginger
将大整数转换为
System.Guid
时遇到一些问题

对于某些上下文,我在一个(“源”)应用程序中使用BouncyCastle将
System.Guid
转换为
Org.BouncyCastle.Math.BigInteger
。然后将该值保存为字符串,格式为
3A2B847A960F0E4A8D49BD62DDB6EB38

然后,在另一个(“目的地”)应用程序中,我获取保存的
biginger
字符串值,并尝试将其转换回
System.Guid

请注意,在目标应用程序中,我不希望BouncyCastle作为参考,而是希望使用核心.NET库进行转换。但是,由于我在转换核心.NET类时遇到问题,我使用的是BouncyCastle,下面的代码正是我想要的:

var data = "3A2B847A960F0E4A8D49BD62DDB6EB38";
var integer = new Org.BouncyCastle.Math.BigInteger( data, 16 );
var bytes = integer.ToByteArrayUnsigned();
var guid = new Guid( bytes ); // holds expected value: (7A842B3A-0F96-4A0E-8D49-BD62DDB6EB38)
如您所见,
Org.BouncyCastle.Math.biginger
上有一个
ToByteArrayUnsigned
方法可以实现这一点。如果我在
System.Numerics.BigInteger
上使用
ToByteArray
(即使在这样的情况下)它不起作用,并且我得到的
System.Guid
与预期不同

那么,使用本机.NET类执行上述操作的最佳方法是什么

解决方案 多亏了@John Tasler的建议,结果证明这是由于endianess。。。该死的,你的忍耐。。。你的忍耐会结束吗P


var parsed=System.Numerics.BigInteger.Parse(“3A2B847A960F0E4A8D49BD62DDB6EB38”,NumberStyles.HexNumber).ToByteArray();
调整数组大小(参考解析,16);
var guid=新guid(已解析的.Reverse().ToArray());//万岁!

使用.NET的BigInteger时,生成的Guid的实际值是多少

这可能是因为这两种实现只是以不同的方式存储字节。持久性等

要查看每个实现的字节数组返回的内容,请执行以下操作:

var sb = new StringBuilder();

foreach (var b in bytes)
{
    sb.AppendFormat("{0:X2} ", b);
} 
sb.ToString();

这将是一个有趣的比较。

在这里我将完全避免使用
biginger
。您的
数据
字节的顺序已经正确,因此您可以直接转换为
字节[]

var data = "3A2B847A960F0E4A8D49BD62DDB6EB38";
var bytes = new byte[16];
for (var i = 0; i < 16; i++)
  bytes[i] = byte.Parse(data.Substring(i * 2, 2), NumberStyles.HexNumber);
var guid = new Guid(bytes); // 7a842b3a-0f96-4a0e-8d49-bd62ddb6eb38
var data=“3A2B847A960F0E4A8D49BD62DDB6EB38”;
var字节=新字节[16];
对于(变量i=0;i<16;i++)
bytes[i]=byte.Parse(data.Substring(i*2,2),NumberStyles.HexNumber);
变量guid=新guid(字节);//7a842b3a-0f96-4a0e-8d49-bd62ddb6eb38

“//expected value”--我想你忘了把期望值放在你的问题里,对吧?很好。我更新了代码,说“guid”变量具有预期值,但从未将它放在任何地方。我已经更新了代码注释以反映这一点。谢谢@hvd!当然,更简洁的打印方法是:string.Join(“,bytes.Select(b=>b.ToString(“X2”));