2017-02-15 3 views
1

Я написал функцию для преобразования строки в шестую строку. Таким образом, «abc» будет преобразован в «616263».Преобразование символа в CP1252 Hex в C#

Вот функция:

private string StringToHex(string myString) 
    { 
     int ctr, li_max; 
     string ls_hex = ""; 

     li_max = myString.Length; 
     for(ctr = 0; ctr < li_max; ctr++) 
      ls_hex = ls_hex + (Convert.ToInt16(myString[ctr])).ToString("x2"); 

     return ls_hex; 
    } 

Однако, когда я Юникод как «<а» Я получаю "2039616263". Поэтому мой первый символ преобразуется в 2039 (юникод). Я хотел получить «8B616263» (CP1252). Смотрите изображение ниже:

enter image description here

Как я могу получить шестнадцатеричное значение для правильного кодирования?
т.е. 8B вместо 2039

+0

После неправильной кодировки строки вы не можете восстановить. Поэтому любой код, читающий массив byte [] и преобразованный в строку, должен быть исправлен, чтобы использовать правильную кодировку. Вероятно, это код, который читает файл, который необходимо исправлять. – jdweng

ответ

2

Вы должны получить использовать кодировку CP1252, чтобы получить байты строки:

private string StringToHex(string myString) 
{ 
    byte[] bytes = Encoding.GetEncoding(1252).GetBytes(myString); 
    return string.Concat(bytes.Select(b => b.ToString("X2"))); 
} 

Мой выход является

8B616263

+0

Спасибо, это сработало отлично. – Philippe

Смежные вопросы