2014-02-25 84 views
0

假設C#如何將長字符串編碼爲固定大小的字符串,並再次從編碼字符串中取回原始字符串?

string a ="bdsbfdsbjfsdjfsdjfjdjdfjbfdgjdfgkjdfjgrytryrtrtydfkgjdfkgdfkjghkdfgj"; 

string b = encode(a); // b has fixed length of 28 ; 

and 

string c = decode(b); 

// c等於一。

+1

什麼是您的查詢? –

+3

所以你想能夠將任何長度的字符串編碼成28個字符的字符串?並解碼它回來?你的'a'甚至可以是2^64個字符?祝你好運:) – JleruOHeP

+0

如果有人得到這個答案,我們可以做文件的最終拉鍊。如果我明白了,你想把字符串(長一個)壓縮到28個字符?如果您只想爲較長的字符串創建「別名」,並且可以在內存中保留較長的字符串,則可以創建「Dictionary '並將較長的字符串轉換爲較短的字符串。 – wudzik

回答

1

這不能工作?當你減少長度時,信息就會丟失。

唯一可能的是您決定不使用UTF-8的全部範圍。讓我們假設你只有你的7位ASCII,這意味着ASCII表中的前128個字符。但是,從長度爲8的字符串中只能得到7的長度。如果考慮到UTF-8的全部功能,可能會多一點。

但到最後,如果你的輸入字符串還沒有一個淋漓盡致的大小和編碼,這將無法正常工作,你總是可以得到一個字符串長度超過你的算法支持的最大值。

1

會的32固定長度做呢?

class MagicEncoder 
{ 
    private Dictionary<string, string> encodedStrings = new private Dictionary<string, string>(); 

    public string Encode(string input) 
    { 
     var code = Guid.NewGuid().ToString("N"); 
     this.encodedStrings[code] = input; 
     return code; 
    } 

    public string Decode(string code) 
    { 
     string output; 
     if (this.encodedString.TryGetValue(code, out output)) 
     { 
      return output; 
     } 

     throw new ArgumengException("Unknown encoding."); 
    } 
} 

如果你真的需要它是28字符,那麼你可以使用另一種方法生成唯一的字符串,或使用a more compact encoding of a Guid

如果您希望能夠在不使用任何其他數據的情況下對您的編碼字符串進行解碼,那麼您的 卡住了,正如在註釋中已經指出的那樣。

+0

我必須將字符串編碼爲固定長度,並在另一個地方再次解碼,我無法將字典元素傳遞到另一個地方,我只需傳遞編碼字符串。 –

+0

我想用一個固定的算法將其編碼爲固定長度,並解碼它以恢復原始。 –

+1

@RamashankerTripathi是啊,我猜這就是你以後,卻忍不住提供這種解決方案,因爲這是你的問題的唯一解釋,這不是不可能的:) – Ergwun