2012-04-04 24 views
1

Ich habe kürzlich an einem Projekt gearbeitet, bei dem ich eine reguläre Zeichenkette in ASCIII hexadezimal konvertieren und das Hex in einer Zeichenkette speichern musste.Wie konvertiert man eine reguläre Zeichenfolge in eine ASCII-hexadezimale Zeichenfolge in C#?

So hatte ich so etwas wie

string random_string = "4000124273218347581" 

und ich wollte es in eine hexadezimale Zeichenfolge in Form konvertieren

string hex_string = "34303030313234323733323138333437353831" 

Dieses wie eine seltsam bestimmte Aufgabe scheinen mag, aber es ist eine begegnete ich und Als ich versuchte herauszufinden, wie ich es ausführen sollte, konnte ich keine Antworten online finden.

Wie auch immer, ich habe es herausgefunden und eine Klasse erstellt, um die Dinge in meinem Code übersichtlicher zu gestalten.

Falls jemand sonst eine reguläre Zeichenfolge in eine hexadezimale Zeichenfolge konvertieren muss, werde ich in einem Moment eine Antwort schreiben, die meine Lösung enthalten wird.

(Ich bin ziemlich neu Ich hoffe, dass dies so Stackoverflow zu tun in Ordnung ist)

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

Stellt sich heraus, dass ich meine Frage nicht selbst innerhalb der ersten 8 Stunden der Frage beantworten kann, weil ich nicht genug Reputation habe.

So kleben ich meine Antwort hier statt:

Okay, also hier ist meine Lösung:

ich eine Klasse erstellt StringToHex im Namensraum genannt

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(); 
    } 
} 

Und Sie verwenden müssen etwas von der Form zu tun:

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

Wenn es ist Die konvertierte Zeichenkette sollte doppelt so lang sein wie die ursprüngliche Zeichenkette (wegen hex mit zwei Bytes, um jedes Zeichen darzustellen).

Jetzt, da jemand bereits erwähnt, können Sie einen Artikel tun etwas Ähnliches finden Sie hier:

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

Aber ich habe es viel Hilfe nicht für meine bestimmte Aufgabe auffinden und ich möchte denke, dass meine Lösung eleganter ist;)

+0

Wie verhält sich der "hexadezimale String" zum Original? Welche Regeln? – Oded

+1

@Oded: ASCII Rulez! –

+2

Setzen Sie eine '3' vor jedem Char :) –

Antwort

7

Dies solange die Zeichencodes in der Zeichenfolge funktioniert, ist nicht größer als 255 (0xFF):

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

Hinweis: Dies funktioniert auch für Zeichencodes unter 16 (0x10), z.B. es erzeugt die Hex-Codes "0D0A" aus den Zeilenumbruch Zeichen "\r\n", nicht "DA".

2

Sie müssen lesen Sie den folgenden Artikel -

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

die Hauptfunktion, die für

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; 
} 

sehen, ob das, was Sie suchen Daten in Hex-Format umwandelt.

+5

Bitte fügen Sie die Schlüsselinformationen aus dieser Ressource in Ihre Antwort ein. – Yuck

+0

Ja, ich habe diesen Artikel gelesen, aber ich fand es nicht so einfach zu verstehen, um ehrlich zu sein - und das motivierte mich, diese Frage/Antwort zu posten, um eine alternative Lösung zu bieten :) – GeorgePotter

+1

Die Methode konvertiert keine Zeichen Im Hex-Format konvertiert es Hex-Format in Zeichen. – Guffa

-1

Okay, also hier ist meine Lösung:

ich eine Klasse erstellt StringToHex im Namensraum genannt

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(); 
    } 
} 

Und, es zu benutzen Sie müssen etwas von der Form tun:

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

Wenn es richtig funktioniert, sollte die konvertierte Zeichenfolge doppelt so lang wie die ursprüngliche Zeichenfolge sein (aufgrund von hex mit zwei Bytes, um jedes Zeichen darzustellen).

Jetzt, da jemand bereits erwähnt, können Sie einen Artikel tun etwas Ähnliches finden Sie hier:

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

Aber ich habe es viel Hilfe nicht für meine bestimmte Aufgabe auffinden und ich möchte denke, dass meine Lösung eleganter ist;)

Verwandte Themen