String in Hex-String konvertieren und zurück



  • Hallo !

    Wie kann ich einen String in einen Hex-String konvertieren und zurück.
    Geht das auch mit einer "BSTR-Struktur" ?



    1. wie bitte?
      Gib' mal ein Beispiel an

    2. im Prinzip ja...



  • in hex -> CString::Format, wsprintf, itoa (radix = 16)
    von hex -> sscanf (gibt evtl. auch was anderes)

    Parameter Format: "%h"



  • peterchen schrieb:

    1. wie bitte?
      Gib' mal ein Beispiel an

    2. im Prinzip ja...

    Gemeint habe ich ...
    Ich habe einen String zB "Hallo Welt". Diesen möchte ich jetzt mittels einer Funktion in einen Hex-String konvertieren, so dass ich "48414C4C4F2057454C54" erhalte.

    Und für den Rückweg, Hex -> String muss es natürlich auch etwas geben.



  • Ganz easy eigentlich:

    CString strHex;
    CString strText="Hallo Welt";
    for(int i=0;i<strText.GetLength();++i)
        strHex.Format(strHex+"%h",strText[i]);
    

    Rückwärts wirds nen bissle komplizierter:

    CString strHex = "48414C4C4F2057454C54";
    CString strText;
    for(int i=0;i<strHex.GetLength();++i)
        strText+=HexToChar(strHex.GetMid(i*2,2));
    

    HexToChar könnte dann zb so aussehen:

    CString HexToChar(CString strHex)
    {
        //Es wird einfach gesagt, die Funktion funktioniert nur korrekt, wenn strHex exakt zwei Zeichen beinhaltet
        return CString(strHex[0]*16+strHex[1]);
    }
    

    Wie immer ungetestet und ohne jegliche Gewähr.



  • Bei einem BSTR müßtetst du halt jedes einzelne Byte konvertieren.
    Wenn du direkt in einen BSTR reinschreiben willst, mußt du den Ziel-String vorher mitentsprechender Länge allozieren (SysAllocStringLen)



  • peterchen schrieb:

    Bei einem BSTR müßtetst du halt jedes einzelne Byte konvertieren.

    Gibt es dafür irgendeine Funktion von Haus-Aus zum konvertieren eines Zeichencodes/Zeichen in den entsprechenden Hex-Wert ?

    Code wäre dann ja wie folgt

    /*   *Data    ist eine Zeichenfolge vom Typ BSTR 
         *HexOut  ist eine Zeichenfolge vom Typ BSTR 
    */
    
    int i;
    
    for (i = 0; i < LenOfData; i++)
        *HexOut = HexJetzt(*data);
    
    /* Natürlich wird entsprechend Speicher allokiert für den BSTR HexOut */
    


  • gibt es nicht, aber dEUs' Code sieht schon mal gut aus. Mußt halt nur dran denken das BSTR = UNICODE = 2 Byte / Zeichen (es sei denn du unterstützt auch 16 Bit OLE bzw. Apple Mac)


Anmelden zum Antworten