簡體   English   中英

Int32的最短字符串表示形式

[英]Shortest string representation for Int32

我需要將Int32轉換為必須在Web表單上輸入的代碼。 為了使訪問者更簡單,此代碼需要盡可能簡單和簡短。

是否有人知道僅使用[0-9]和[AZ]將Int32轉換為最短字符串表示的好算法?

所需的基數為36 對於非常緊湊的表示,這使用字母和數字符號對數字進行編碼。

可以將編碼編碼為36,但是出於所有人的理智(尤其是您的用戶,處理I vs 1,O vs 0等),我建議您堅持使用十六進制; 加上它是內置的:

    int value = 22334;
    string hex = Convert.ToString(value, 16); // 573e
    value = Convert.ToInt32(hex, 16);

只是一個例子,我沒有查詢所有細節。

給定一個32位整數:

將其拆分為8x4位

一個4位數組給出2 ^ 4 = 16個可能的連擊

然后,將4位的每個文字值與從小寫A或其他字符開始的ASCII字符代碼進行匹配。

string s = code.ToString();

您可以使用Encoding類來獲取字符串:

int value = 1234;
string intString = Encoding.Default.GetString(BitConverter.GetBytes(value));

除了默認編碼,您可以選擇任意一個。

您有幾種選擇:

  1. Base36滿足您規定的要求
  2. Base64較短,但存在轉義最終=的問題

您遇到的一個基本問題是,制作的時間越短,正確記住的難度就越大。 因此,您需要考慮是要復制/粘貼還是讓人們記住它。

對於復制/粘貼,我可能會使用給定的對齊base64,以避免最后出現等號(但您可以將=更改為_並在服務器上轉換回來)。

對於人類可讀的,建議完全做其他事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM