C# 将GUID转换为以十进制为基数的字符串(也称为以逗号分隔的大整数,以十进制为基数)
如何将System.GUID(C#)转换为十进制字符串(也称为以逗号分隔的大整数,以十为基数) 比如433352133455122445557129 Guid.ToString将Guid转换为十六进制表示形式 我正在使用C#和.NET2.0C# 将GUID转换为以十进制为基数的字符串(也称为以逗号分隔的大整数,以十进制为基数),c#,string,integer,decimal,guid,C#,String,Integer,Decimal,Guid,如何将System.GUID(C#)转换为十进制字符串(也称为以逗号分隔的大整数,以十为基数) 比如433352133455122445557129 Guid.ToString将Guid转换为十六进制表示形式 我正在使用C#和.NET2.0 using System; using System.Numerics; Guid guid = Guid.NewGuid(); byte[] guidAsBytes = guid.ToByteArray(); BigInteger guidAsInt =
using System;
using System.Numerics;
Guid guid = Guid.NewGuid();
byte[] guidAsBytes = guid.ToByteArray();
BigInteger guidAsInt = new BigInteger(guidAsBytes);
string guidAsString = guidAsInt.ToString("N0");
请注意,字节数组中的字节顺序反映了GUID子组件的endian属性。为了简洁起见,您可以使用一行代码完成相同的工作:
string GuidToInteger = (new BigInteger(Guid.NewGuid().ToByteArray())).ToString("N0");
请记住,.ToString(“N0”)
不是“否”。。。看到区别了吗
享受请注意,
guid.ToByteAray()
不会返回可传递给biginger
的构造函数的数组。要使用数组,需要重新排序,并使用尾随零,以确保Biginteger将byteArray视为正数(请参阅MSDN docs)。一个简单但性能较差的功能是:
私有静态字符串guidtostringsingstringandparse(Guid值)
{
var guidBytes=string.Format(“0{0:N}”,值);
var biginger=biginger.Parse(guidBytes,NumberStyles.HexNumber);
返回bigInteger.ToString(“N0”,CultureInfo.InvariantCulture);
}
正如Victor Derks在回答中指出的那样,您应该在数组的末尾追加一个00字节,以确保生成的BigInteger为正
根据BigInteger结构(System.Numerics)MSDN文档:
为了防止BigInteger(Byte[])构造函数将负值的补码表示与正值的符号和幅值表示混淆,通常设置字节数组中最后一个字节的最高有效位的正值应包括一个值为0的附加字节
(另见:)
下面是执行此操作的代码:
var guid = Guid.NewGuid();
return String.Format("{0:N0}",
new BigInteger(guid.ToByteArray().Concat(new byte[] { 0 }).ToArray()));
谢谢,但是在.NET Framework 2.0中不提供BigInteger,尽管此答案被标记为正确-请确保看到其他答案-它缺少一个00