簡體   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