2012-04-04 5 views
1

Я недавно работал над проектом, в котором мне нужно было преобразовать правильную строку чисел в шестнадцатеричный ASCIII и сохранить шестнадцатеричную строку.Как преобразовать правильную строку в шестнадцатеричную строку ASCII в C#?

Так что было что-то вроде

string random_string = "4000124273218347581" 

, и я хотел, чтобы преобразовать его в шестнадцатеричную строку в виде

string hex_string = "34303030313234323733323138333437353831" 

Это может показаться, как ни странно конкретной задачи, но это один я столкнулся и , когда я попытался выяснить, как его выполнить, я не мог найти ответы в Интернете.

В любом случае, я понял, и создал класс, чтобы сделать вещи более аккуратными в моем коде.

Если кому-то еще нужно преобразовать правильную строку в шестнадцатеричную строку, я отправлю ответ в тот момент, который будет содержать мое решение.

(я довольно новыми для StackOverflow, так что я надеюсь, что делает это хорошо)

========================= ================

Оказывается, я не могу ответить на свой вопрос сам в течение первых 8 часов после того,

Так я придерживаюсь мой ответ здесь вместо:

Итак, вот мое решение:

Я создал класс с именем StringToHex в пространстве имен

public class StringToHex 
{ 
    private string localstring; 
    private char[] char_array; 
    private StringBuilder outputstring = new StringBuilder(); 
    private int value; 

    public StringToHex(string text) 
    { 
     localstring = text; 
    } 

    public string ToAscii() 
    { 
     /* Convert text into an array of characters */ 
     char_array = localstring.ToCharArray(); 
     foreach (char letter in char_array) 
     { 
      /* Get the integral value of the character */ 
      value = Convert.ToInt32(letter); 

      /* Convert the decimal value to a hexadecimal value in string form */ 
      string hex = String.Format("{0:X}", value); 

      /* Append hexadecimal version of the char to the string outputstring*/ 
      outputstring.Append(Convert.ToString(hex)); 
     } 
    return outputstring.ToString(); 
    } 
} 

И использовать его вам необходимо сделать что-то вроде формы:

/* Convert string to hexadecimal */ 
StringToHex an_instance_of_stringtohex = new StringToHex(string_to_convert); 
string converted_string = an_instance_of_stringtohex.ToAscii(); 

Если это так, правильная работа, преобразованная строка должна быть в два раза длиннее исходной строки (из-за шестнадцатеричного использования двух байтов для представления каждого символа).

Теперь, когда кто-то уже отмечалось, вы можете найти статью, сделать что-то подобное здесь:

http://www.c-sharpcorner.com/UploadFile/Joshy_geo/HexConverter10282006021521AM/HexConverter.aspx

Но я не нашел его большую помощь для моей конкретной задачи, и я хотел бы думаю, что мое решение более элегантный;)

+0

Как «шестнадцатеричная строка» относится к оригиналу? Какие правила? – Oded

+1

@Oded: ASCII Rulez! –

+2

положил '3' перед каждым символом :) –

ответ

7

Это работает до тех пор, как коды символов в строке не больше, чем 255 (0xFF):

string hex_string = 
    String.Concat(random_string.Select(c => ((int)c).ToString("x2"))); 

Примечание: Это также работает для символьных кодов ниже 16 (0x10), например, он будет генерировать шестнадцатеричные коды "0D0A" от символов разрыва строки "\r\n", а не "DA".

2

вы должны прочитать следующую статью -

http://www.c-sharpcorner.com/UploadFile/Joshy_geo/HexConverter10282006021521AM/HexConverter.aspx

основная функция, которая преобразует данные в шестнадцатеричном формате

public string Data_Hex_Asc(ref string Data) 
{ 
    string Data1 = ""; 
    string sData = ""; 
    while (Data.Length > 0) 
    //first take two hex value using substring. 
    //then convert Hex value into ascii. 
    //then convert ascii value into character. 
    { 
     Data1 = System.Convert.ToChar(System.Convert.ToUInt32(Data.Substring(0, 2), 16)).ToString(); 
     sData = sData + Data1; 
     Data = Data.Substring(2, Data.Length - 2); 
    } 
    return sData; 
} 

увидеть, если это то, что вы ищете.

+5

Пожалуйста, включите ключевые фрагменты информации из этого ресурса в свой ответ. – Yuck

+0

Да, я прочитал эту статью, но я не счел это понятным, чтобы быть честным - и это побудило меня опубликовать этот вопрос/ответ, чтобы предоставить альтернативное решение :) – GeorgePotter

+1

Это метод не конвертирует символы в шестнадцатеричном формате, он преобразует шестнадцатеричный формат в символы. – Guffa

-1

Итак, вот мое решение:

Я создал класс с именем StringToHex в пространстве имен

public class StringToHex 
{ 
    private string localstring; 
    private char[] char_array; 
    private StringBuilder outputstring = new StringBuilder(); 
    private int value; 

    public StringToHex(string text) 
    { 
     localstring = text; 
    } 

    public string ToAscii() 
    { 
     /* Convert text into an array of characters */ 
     char_array = localstring.ToCharArray(); 
     foreach (char letter in char_array) 
     { 
      /* Get the integral value of the character */ 
      value = Convert.ToInt32(letter); 

      /* Convert the decimal value to a hexadecimal value in string form */ 
      string hex = String.Format("{0:X}", value); 

      /* Append hexadecimal version of the char to the string outputstring*/ 
      outputstring.Append(Convert.ToString(hex)); 
     } 
    return outputstring.ToString(); 
    } 
} 

и использовать его вам нужно сделать что-то вида:

/* Convert string to hexadecimal */ 
StringToHex an_instance_of_stringtohex = new StringToHex(string_to_convert); 
string converted_string = an_instance_of_stringtohex.ToAscii(); 

Если он работает правильно, преобразованная строка должна быть в два раза длиннее исходной строки (из-за шестнадцатеричного использования двух байтов для представления каждого символа).

Теперь, когда кто-то уже отмечалось, вы можете найти статью, сделать что-то подобное здесь:

http://www.c-sharpcorner.com/UploadFile/Joshy_geo/HexConverter10282006021521AM/HexConverter.aspx

Но я не нашел его большую помощь для моей конкретной задачи, и я хотел бы думаю, что мое решение более элегантно;)

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