繁体   English   中英

将 GUID 转换为以十进制为基数的字符串(又名以逗号分隔的巨大整数,以十为基数)

[英]Convert GUID to string in decimal base (aka to a huge, comma delimited integer, in base ten)

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

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

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

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

请注意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);
}

正如 Victor Derks 在他的回答中指出的那样,您应该在数组末尾附加一个 00 字节以确保生成的 BigInteger 为正。

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

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

(另见: byte[] to unsigned BigInteger?

这是执行此操作的代码:

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

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

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

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

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

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

享受

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM