ASCII 2 Hex, wie verarbeite ich Daten aus WinSock ?



  • Hiho,

    mal angenommen ich habe den ganzen Socketkram hinter mir, alles funzt prima, ich kann Datenpackete senden und empfangen.

    Jetzt empfang ich ein Datenpacket, sagen wir mal in diesem Format:

    struct Packet {
    	WORD size; // groesse
    	BYTE data[1000]; // daten
    };
    

    sagen wir mal das Datenpacket sieht so aus: 05HALLO

    Wie bekomme ich es jetzt aber so hin, dass er mit den ganzen Kram in Hex ausgibt, statt in "Lautschrift" bzw. ASCII (wenn das kein ASCII ist entschuldige ich mich, bin ja noch am Lernen).

    Ich hab jetzt schon ne ganze menge Versucht, obs jetzt die Konvertierung von ASCII 2 Decimal 2 Hex ist, oder von ASCII per ">> 4" auf Decimal runter oder was auch immer, ich komm da nicht wirklich voran.

    Anstatt dem 05HALLO soll er mit sozusagen 30 35 48 41 4C 4C 4F ausgeben.

    Wer wagt dies zu bewerkstelligen?

    Bin am Verzweifeln!

    Außerdem würde ich gerne wissen, wie man dann beispielsweise nur die ersten 2 Bytesätze in eine eigene WORD Variable speichern kann. Da die ganzen Daten ja leider direkt als chars gespeichert werden, finde ich da keine passende Lösung. 😞

    MfG. paSe



  • was? du castest das nattüllich

    struct Packet {
        WORD size; // groesse
        BYTE data[1000]; // daten
    };
    
    struct Packet send_packet;
    ...
    send(s, (const char*)&send_packet, bla, bla);
    ...
    struct Packet recv_packet;
    recv(s, (const char*)&recv_packet, bla, bla);
    

    😕 😕 😕 😕 😕



  • Nee, da hast du mich glaub ich missverstanden.

    Ich weiß jetzt auch endlich wo mein Problem liegt.

    Beispiel:

    char x = 0x0025;
    
    cout<<hex<<(int)x;
    

    Und was ist die Ausgabe? ICH erwarte da eigentlich

    2500
    

    !

    Was kommt?

    250
    

    Das ist der Grund wieso meine Hexcodes immer so wirr und unvollständig aussahen.

    Wie kann man das Problem umgehen, dass er mir die Nullen rauswirft?

    Weil wenn ich jetzt nen längeres Packet bekomme.. sagen wir mal EIGENTLICH

    25 00 04 29 00
    

    dann würde ja ja nur

    25 0 4 29 0
    

    stehen ... das würde dann zusammengedrückt

    2504290
    

    aussehen.

    Wie soll ich da jetzt unterscheiden, ob das 2te jetzt 0x04 oder 0x0 und 0x04 ist?

    Und eben noch als kleinen Reminder ;):

    Ich hab meinen Buffer mit 2500 als ASCII drin.

    Das wandel ich jetzt in Hex um und will das dann als WORD zusammenfassen.

    Nur wie?

    WORD packet;
    char buffer[256];
    
    buffer[0] = 0x25;
    buffer[1] = 0x00;
    
    cout<<hex<<(int)buffer[0]<<(int)buffer[1]; // gibt leider nur 250 statt 2500 aus (mein 1. problem)
    
    cout<<endl;
    
    packet = buffer[0] + buffer[1]; // funktioniert nicht so wie es soll
    
    cout<<packet; // denn hier gibt er auch keine nullen aus
    

Anmelden zum Antworten