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