2014-01-15 4 views
1

У меня есть hex, представляющий значения ascii, хранящиеся в следующем формате.Hex string to plain text

// Hex reperesention of ascii string 
string hexString = "48-65-6C-6C-6F-20-77-6F-72-6C-64-21-21-21"; 

// Could someone help fill in the blanks here? 
private string hexConverter(string hexString) 
{ 
    string asciiCharString; 

    // Convert it 

    return asciiCharString; 
} 

поэтому при вызове;

string s = hexConverter(hexString); 

string s будет содержать "Hello world !!!" в этом случае.

+4

Код, который вы показали не является попыткой решить эту проблему. Можете ли вы отредактировать свой пост, чтобы отразить ваши попытки? –

+1

Возможный дубликат [C# hex to ascii] (http://stackoverflow.com/questions/5613279/c-sharp-hex-to-ascii) – Joe

+0

Разделить на '-', передать строки через шестнадцатеричную строку в байтовый преобразователь, передать этот массив байтов через 'Encoding.ASCII.GetString()', и все готово –

ответ

2
var convertedString = new StringBuilder(); 

foreach(var hex in hexString.Split('-')) 
{ 
    var unicode = int.Parse(hex, NumberStyles.HexNumber); 
    convertedString.Append((char)unicode); 
} 

return convertedString.ToString(); 
+0

Это может быть или не быть используемой кодировкой ... если вы используете только текст ASCII, вам, вероятно, не нужно заботиться. –

+0

Отлично, спасибо. –

0
private string hexConverter(string hexString) 
{ 
    string asciiCharString ="" ; 

    var splitResult = hexString.Split('-'); 

    foreach (string hexChar in splitResult) 
    { 
     var byteChar = int.Parse(hexChar, NumberStyles.HexNumber); 
     asciiCharString += (char)byteChar; 
    } 

    return asciiCharString; 
} 

// Test 
private void button1_Click(object sender, EventArgs e) 
{ 
    string hexString = "48-65-6C-6C-6F-20-77-6F-72-6C-64-21-21-21"; 
    string asciiString = hexConverter(hexString); 

    MessageBox.Show(asciiString); 
} 
0

Позволяет разорвать этот вопрос вниз ...

Таким образом, вы первый хотите, чтобы разбить строку, основанную на дефис ('-'). Для этого мы использовали бы Split('-'). Это дает массив строк.

hexString.Split('-') 

Затем мы хотим преобразовать эти строки в число. Поскольку это ASCII, конвертируйте каждую строку в byte.

byte.Parse(value, System.Globalization.NumberStyles.HexNumber) 

После того, как мы имеем кучу byte с, то мы можем превратить его в String используя кодер ASCII (Encoding.ASCII.GetString())

Так все это вместе:

static string hexConverter(string hexString) 
{ 
    return Encoding.ASCII.GetString(fetchBytes(hexString).ToArray()); 
} 

static IEnumerable<byte> fetchBytes(String hexString) 
{ 
    foreach (var value in hexString.Split('-')) 
    yield return byte.Parse(value, System.Globalization.NumberStyles.HexNumber); 
} 

Кодировка

Если на более поздний срок вы решите, что вам нужно UTF-8 или что-то еще, тогда все, что вам нужно будет сделать, это заменить на Encoding.UTF8, а остальная часть логики по-прежнему будет работать.