2010-02-22 27 views
1

byte [] test = Form1.StrToByteArray(「simpletext」); string encoded_text = BitConverter.ToString(test).Replace(「 - 」,「」).ToLowerInvariant(); textBox1.Text = encoded_text; // 73696d706c6574657874如何重新編碼回來? BitConverter

從這行「73696d706c6574657874」中取回「simpletext」?

// StrToByteArray()

public static byte[] StrToByteArray(string str) 
{ 
      System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); 
      return encoding.GetBytes(str); 
} 

回答

4

你絕對要使用十六進制開始嗎?一個稍微更有效(和可逆的框架方法)選項是使用基地64:

string base64 = Convert.ToBase64String(test); 
byte[] originalBytes = Convert.FromBase64String(base64); 
string text = Encoding.ASCII.GetString(originalBytes); 

我個人不會使用ASCII作爲編碼建議,但是 - UTF-8將努力以同樣的方式爲ASCII字符,但允許編碼所有的Unicode。

如果你必須使用十六進制,你需要一個方法來解析十六進制 - 我have an example here

+0

THX的人,但我可以使用ASCII代碼,因爲http://stackoverflow.com/questions/2305676/problems-understanding-an-open -source-blowfish-api 這裏我有string dec =「A-ґР^ E - 」; // asdasdas - 這個文本 並且必須收到「asdasdas」,但是我得到了「3?} Fg5 ??」,因爲我使用ASCII – Alex 2010-02-22 07:39:47

+0

@Alex:實際上,該文章顯示包含*非ASCII *字符的「dec」...您是否真的很樂意使用非常有損耗的轉換? – 2010-02-22 07:41:46

+0

那我怎麼辦? – Alex 2010-02-22 07:46:38

1
var input = "73696d706c6574657874"; 
var bytes = Enumerable 
    .Range(0, input.Length) 
    .Where(x => 0 == x % 2) 
    .Select(x => Convert.ToByte(input.Substring(x, 2), 16)) 
    .ToArray(); 
Console.WriteLine(Encoding.ASCII.GetString(bytes)); 
+0

非常thx !!!它的工作!!!! :)) – Alex 2010-02-22 07:47:17

+0

這是一個非常低效的解析器,請注意。看看我的答案中的鏈接,以獲得更高效的版本。我也對OP所採用的其他戰略產生了嚴重的懷疑。 – 2010-02-22 07:50:40

+0

和thx u先生。達林季米特洛夫+1 – Alex 2010-02-22 12:38:35

0

應該這樣做

public static byte[] StrToByteArray(string str) 
     { 
      System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); 
      return encoding.GetBytes(str); 
     } 

//這裏IM取代ASCIIEncoding到UTF8Encoding是怎麼說的我達林季米特洛夫。尊敬的人!非常thx !!!!

,我現在有結果等於A-ґР^ E- <