[英]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.