2017-04-13 75 views
0

我嘗試一個解決方案,以格式「二進制」(.bin), 像xxd命令轉換字符串十六進制值。C#如何將字符串十六進制值轉換爲「bin」像xxd

例子: 我有一個字符串hexValue 「17c7dfef853adcddb2c4b71dd8d0b3e3363636363」

在Linux上,我要像下一個結果:

回聲 「hexvalue」> file.hex 貓file.hex | XXD -r -p> file.bin

的file.bin得到hexdump都:

0000000 17 C7 DF的EF 85 3A DC DD B2 C4 B7 1D D8 D0 B3 E3

我對這個轉換計劃是:

Private static string convertHex(string value) 
{ 
    string[] hexVal = value.Split(' '); 
    StringBuilder s = new StringBuilder(); 

    foreach (string hex in hexVal) 
    { 
     int val = Convert.ToInt32(hex, 16); 
     string stringValue = char.ConvertFromUtf32(val); 
     s.Append(stringValue); 
    } 
    return s.ToString(); 
} 

string MyString = "17 c7 df ef 85 3a dc dd b2 c4 b7 1d d8 d0 b3 e3 36 36 36 36 36"; 
string newString = converthex(MyString); 
Console.WriteLine(newString); 
File.WriteAllText("file2.bin", newString); 

所以,現在,WH烯看file2.bin的hexdump都,我看到:

0000000 17 87 C3 C3 C3 97 AF C2 85 C3 3A 9C 9D C3 C2 B2

0000010 C3 84 C2 B7 1D C3 98 C3 90 C2 b3 a3 36 36 36

爲什麼c3或c2存在於我的新文件中? 你有解決方案嗎?

感謝您的幫助!

回答

0

File.WriteAllText用於文本文件編寫,它以UTF-8編碼傳遞的字符串。這就是爲什麼你的額外字節出現在輸出文件中。

您期望的效果表明您需要一個二進制文件,而無需進行內部轉換爲UTF-32字符串。這裏是工作版本的示例:

class Program 
{ 
    private static byte[] convertHex(string value) 
    { 
     string[] hexVal = value.Split(' '); 
     byte[] output = new byte[hexVal.Length]; 
     var i = 0; 
     foreach (string hex in hexVal) 
     { 
      byte val = (byte)(Convert.ToInt32(hex, 16)); 
      output[i++] = val; 
     } 
     return output; 
    } 
    static void Main(string[] args) 
    { 
     string MyString = "17 c7 df ef 85 3a dc dd b2 c4 b7 1d d8 d0 b3 e3 36 36 36 36 36"; 
     var file = new FileStream("file2.bin", FileMode.Create); 
     var byteArray = convertHex(MyString); 
     file.Write(byteArray, 0, byteArray.Length); 
    } 
} 
+0

哼,好的,這是我的false.My程序必須計算十六進制字符串中的md5sum;以二進制格式。但是,我沒有看到,我的函數md5它調用utf8.getstring。 好的,這很好,在你的幫助下。謝謝。有一天這個.. OMG !! – Tybbow

相關問題