2010-06-13 103 views
0

我有一個字符串,我希望將其唯一地表示爲一個整數。將字符串編碼爲整數.NET

例如:A3FJEI = 34950140

我將如何去寫一個EncodeAsInteger(string)方法。我明白,字符串中的字符數量會使整數大大增加,迫使該值變成一個long,而不是int。

因爲我需要的值是一個整數,我不需要數字表示是完全唯一的字符串。

也許我可以通過字符串的所有字符,並總結字符的數字鍵碼。

回答

3

如果這些是你的要求:

  1. 某種字符串→整數的映射。
  2. 整數不一定是唯一的。

然後你很幸運,因爲這正是GetHashCode()方法所做的! MSDN頁面提供了一些示例哈希代碼。請注意,這些都是完全隨意的,可以在未來版本的CLR中進行更改。

爲 「The哈希碼」 是:0x00001505,5381
哈希碼爲 「a」 是:0x0002B5C4,177604
爲哈希碼 「AB」 是:0x00596E26,5860902
哈希碼爲 「ABC」 是:0x0B873285,193409669
爲 「ABD」 哈希碼是:0x0B873282,193409666
爲哈希碼 「阿部」 是:0x0B873283,193409667
爲 「ABCDEF」 是哈希碼:0x4DDB4BE2, 1306217442
「abcdeg」的哈希碼是:0x4DDB4BE3,1306217443
爲 「abcdeh」 是哈希碼:0x4DDB4BEC,1306217452
爲 「abcdei」 哈希碼是:0x4DDB4BED,1306217453
爲 「ABCDEG」 哈希碼是:0x941C4FC3,-1810083901
爲「The散列代碼Abcdeh」是:0x941C4FCC,-1810083892
的散列碼 「Abcdei」 是:0x941C4FCD,-1810083891

+0

感謝偉大的信息!我的要求使我得到一個解決方案,將在所有版本的.net – 2010-06-13 04:28:18

+2

具有相同的結果然後使用加密命名空間來獲取不會更改的散列:http://asp.dotnetheaven.com/howto/doc/ hash.aspx – 2010-06-13 04:31:23

0
protected int EncodeStringAsInt(string value) 
    { 
     return value.ToCharArray().Sum(c => Convert.ToInt32(c)); 
    } 
+1

與真正的散列算法相比,這會給出很多重複映射,例如BAT和TAB具有相同的值。 – 2010-06-13 04:31:04

+0

@Eric J - 你可以排除或(^運算符)每個後續字符而不是總和,以避免簡單的蝙蝠/標籤問題,但是,密碼散列會更好。 – 2010-06-13 04:46:13

+0

@Joel:我在一天中也使用了XOR :-)正如你所說,它比.NET中的加密哈希好,但不如你的。但你如何在Linq中表達?使用.Aggregate()擴展方法的@Eric - – 2010-06-13 16:49:18