我需要將Int32
轉換爲必須在Web表單上輸入的代碼。爲了讓參觀者保持簡單,此代碼需要儘可能簡單和簡短。Int32的最短字符串表示形式
是否有人知道,用於將Int32
,以最短的字符串表示只可能[0-9]使用與[A-Z]一個好的算法?
我需要將Int32
轉換爲必須在Web表單上輸入的代碼。爲了讓參觀者保持簡單,此代碼需要儘可能簡單和簡短。Int32的最短字符串表示形式
是否有人知道,用於將Int32
,以最短的字符串表示只可能[0-9]使用與[A-Z]一個好的算法?
你可能編碼爲基礎-36,但爲了大家的理智(尤其是你的用戶,處理I vs 1,O vs 0等),我建議只堅持十六進制;再加上它是建立在:
int value = 22334;
string hex = Convert.ToString(value, 16); // 573e
value = Convert.ToInt32(hex, 16);
除此之外,基地36仍然可能需要7位數,所以十六進制(8位數),你得到很少。 – AakashM 2010-11-04 11:08:39
string s = code.ToString();
只是一個例子,我沒有查找所有這些細節。
給定一個32位的int:
將它分成8×4比特
A 4位陣列給出2^4 = 16個可能的組合技
然後匹配4個比特到的每個字面值從小寫字母A開始的ascii字符代碼或其他。
所以基本上,你剛剛描述了十六進制... – 2010-11-04 10:50:55
他想要一個特定的角色範圍,這種方式可以讓他定義自己的角色,如果它將來需要改變的話。 – 2010-11-04 10:52:15
可以使用Encoding類來獲取字符串:而不是默認的
int value = 1234;
string intString = Encoding.Default.GetString(BitConverter.GetBytes(value));
編碼你可以選擇任何你想要的。
您有幾種選擇:
一個基本問題的問題是你做得越短,記得越準確就越難。所以你需要考慮你是否希望這是爲了複製/粘貼或讓人記住。
複製/粘貼,我可能會用給定的,以避免在年底等號對齊的base64去(但你可以改變= _到並轉換回在服務器上)。
對於人類可讀,建議乾脆做別的事情。
你是什麼意思的代碼? – 2010-11-04 10:46:16
@Darin,大概是一個 「字符串表示[...]僅使用[0-9]和[A-Z]」 – 2010-11-04 10:47:27
我不理解,不是'Int32.ToString()'方法在這種情況下是否足夠? – 2010-11-04 10:48:26