2010-11-04 43 views
1

我需要將Int32轉換爲必須在Web表單上輸入的代碼。爲了讓參觀者保持簡單,此代碼需要儘可能簡單和簡短。Int32的最短字符串表示形式

是否有人知道,用於將Int32,以最短的字符串表示只可能[0-9]使用與[A-Z]一個好的算法?

+0

你是什麼意思的代碼? – 2010-11-04 10:46:16

+0

@Darin,大概是一個 「字符串表示[...]僅使用[0-9]和[A-Z]」 – 2010-11-04 10:47:27

+0

我不理解,不是'Int32.ToString()'方法在這種情況下是否足夠? – 2010-11-04 10:48:26

回答

6

可能編碼爲基礎-36,但爲了大家的理智(尤其是你的用戶,處理I vs 1,O vs 0等),我建議只堅持十六進制;再加上它是建立在:

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

除此之外,基地36仍然可能需要7位數,所以十六進制(8位數),你得到很少。 – AakashM 2010-11-04 11:08:39

0
string s = code.ToString(); 
1

只是一個例子,我沒有查找所有這些細節。

給定一個32位的int:

將它分成8×4比特

A 4位陣列給出2^4 = 16個可能的組合技

然後匹配4個比特到的每個字面值從小寫字母A開始的ascii字符代碼或其他。

+1

所以基本上,你剛剛描述了十六進制... – 2010-11-04 10:50:55

+0

他想要一個特定的角色範圍,這種方式可以讓他定義自己的角色,如果它將來需要改變的話。 – 2010-11-04 10:52:15

6

一個base 36表示是你想要的。這使用字母和數字符號來編碼數字,以表示非常緊湊。

+2

基地36意味着你可以結束與I10O010,這不是特別'簡單的遊客'... – AakashM 2010-11-04 11:15:21

0

可以使用Encoding類來獲取字符串:而不是默認的

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

編碼你可以選擇任何你想要的。

+0

是的,它保持簡單。 ToString()方法簡單而不是l33t! – jgauffin 2010-11-04 11:19:01

+0

@jgauffin,:-) intString不會「變成」變成「1234」。不過,您的評論仍然很有趣! – 2010-11-04 11:54:23

+0

呵呵。你是對的。我錯過了BitConverter部分,但代碼產生了不可讀的字符。無論如何。我很抱歉,希望你能原諒我的愚蠢。除非你這樣做,否則我不會休息。我的整個生命都依賴於它。請! ;) – jgauffin 2010-11-04 12:37:34

0

您有幾種選擇:

  1. Base36滿足你們所要求的
  2. Base64是較短的,但你必須逃脫最終=的你有

一個基本問題的問題是你做得越短,記得越準確就越難。所以你需要考慮你是否希望這是爲了複製/粘貼或讓人記住。

複製/粘貼,我可能會用給定的,以避免在年底等號對齊的base64去(但你可以改變= _到並轉換回在服務器上)。

對於人類可讀,建議乾脆做別的事情。