将GUID转换为十进制基数中的字符串(也称为以十进制表示的巨大逗号分隔整数)

时间:2010-11-17 16:54:16

标签: string integer guid decimal

如何将System.GUID(在C#中)转换为十进制基数的字符串(又名为十进制的逗号分隔的巨大整数)?

像433,352,133,455,122,445,557,129,......

Guid.ToString将GUID转换为十六进制表示。

我正在使用C#和.Net 2.0。

4 个答案:

答案 0 :(得分:9)

请注意guid.ToByteAray()不会返回可以传递给BigInteger的数组。要使用该数组,需要重新排序和尾随零,以确保Biginteger将byteArray视为正数(请参阅MSDN文档)。一个简单但性能较差的功能是:

private static string GuidToStringUsingStringAndParse(Guid value)
        {
            var guidBytes = string.Format("0{0:N}", value);
            var bigInteger = BigInteger.Parse(guidBytes, NumberStyles.HexNumber);
            return bigInteger.ToString("N0", CultureInfo.InvariantCulture);
        }

答案 1 :(得分:2)

正如Victor Derks在他的回答中指出的那样,你应该在数组末尾添加一个00字节,以确保得到的BigInteger是正数。

根据BigInteger结构(System.Numerics)MSDN文档:

  

防止BigInteger(Byte [])构造函数将负值的二进制补码表示与正值的符号和幅度表示混淆,其中正值表示最后一个字节的最高有效位通常设置的字节数组中应该包含一个值为0的附加字节。

(另见:byte[] to unsigned BigInteger?

以下代码:

var guid = Guid.NewGuid();
return String.Format("{0:N0}",
    new BigInteger(guid.ToByteArray().Concat(new byte[] { 0 }).ToArray()));

答案 2 :(得分:1)

using System;
using System.Numerics;

Guid guid = Guid.NewGuid();
byte[] guidAsBytes = guid.ToByteArray();
BigInteger guidAsInt = new BigInteger(guidAsBytes);
string guidAsString = guidAsInt.ToString("N0");

请注意,字节数组中的字节顺序反映了GUID子组件的字节顺序。

答案 3 :(得分:1)

为了简洁起见,您可以使用一行代码完成相同的工作:

string GuidToInteger = (new BigInteger(Guid.NewGuid().ToByteArray())).ToString("N0");

请记住.ToString("N0")不是“不”......看到区别?

享受