- fchao-Sinus-Wechselrichter AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: c++ + String + Integer Problem

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Magge2k
    Registriert seit
    27.10.2004
    Beiträge
    163

    c++ + String + Integer Problem

    Anzeige

    Powerstation Test
    Hi Leute,

    wie kann ich eine Reihe von Hex-Werten in einen String packen?

    also der String soll USBDATA heißen und die folgende werte sollen da rein

    0x02,0x33,Wert1,Wert2,Wert3,Wert4,Wert5,Wert6,Wert 7,Wert8,0x0D


    Ich hoffe des war deutlich ausgedrückt!

    greez!

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    49
    Beiträge
    1.146
    Da hätte ich eine fertige Funktion für Dich, allerdings müsstest Du bis morgen warten, die habe ich nur auf meinem Arbeits-PC...

    askazo

  3. #3
    Gast
    Joa das wäre cool!

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    49
    Beiträge
    1.146
    So, folgende Funktion macht aus einem Hex-Byte ein Ascii-Word.
    Aus 0x2F wird also 0x3246. Wenn Du das Word nun in einen String schreibst, wird wieder 2F draus, diesmal als String.
    Nun musst Du das ganze nur noch zu einem kompletten String zusammensetzen.
    Das 0x lässt sich dann auch leicht einbauen, wenn Du das noch davor haben möchtest.

    Code:
    WORD Hex2Ascii(BYTE byHex)
    {
    	WORD wAscii;
    	BYTE byLow, byHigh;
    	
    	byLow = byHex & 0x0F;
    	byHigh = byHex >> 4; 
    	
    	if (byHigh > 9)
    		wAscii = (0x37 + byHigh) << 8;
    	else
    		wAscii = (0x30 + byHigh) << 8;
    	
    	if (byLow > 9)
    		wAscii += 0x37 + byLow;
    	else
    		wAscii += 0x30 + byLow;
    	
    	return wAscii;
    }
    Gruß,
    askazo

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Magge2k
    Registriert seit
    27.10.2004
    Beiträge
    163
    aha Danke!

    Nur hab ich gerade ein kleines Verständnissproblem.
    Weil ich weiß nicht so genau wie ein String aufgebaut ist.

    Wenn ich deine Funktion nun benutze dann wäre es mir mit dieser Möglich einen HEX-Wert z.B. 0x2F auf einem LCD-Display auch als 2F auszugeben.

    Aber ich möchte ja Daten über den USB-Bus zu meinem µController bringen. Dazu muss ich diese Daten (siehe ersten Beitrag) in einen String schreiben z.B. *string um möglichst "viele" Daten auf einmal zum µC zu bringen. Am µC sollen dann wieder normal die Daten vorhanden sein.

    z.B.

    0x02,0x33,0xFF,Wert2.....usw.,0x0D

    und dann bekommt der µController auch wieder

    STX = 0x02
    DEVICE = 0x33
    Wert1 = 0xFF
    Wert2 = 0x00
    ... usw.

    ETX = 0x0D

    Sorry wenns schlecht beschreiben ist ich hab keine ahnung wie ich mich so recht ausdrücken soll.

    gruß


    PS: Weil bei einem String kann ich ja im normalfall einfach "HalloWelt!" schreiben und dann kommen die Werte nacheinander anstelle von dem "" und den Buchstaben was ja ASCII werte sind möchte ich halt normale HEX-Werte von 0 - FF verschicken...

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    09.08.2004
    Ort
    Wien
    Alter
    40
    Beiträge
    208
    Hallo,

    such mal die libary string. da gibt es eine funktion die nennt sich strcat. mit der kannst du problemlos an einem string einen weiteren anhängen, würde dann so aussehen:

    Code:
    char USBDATA[100]
    strcpy(USBDATA,"02"); //oder 0x02, jenachdem was du brauchst/willst
    strcat(USBDATA,"33"); //hier das selbe
    strcat(USBDATA,Wert1); // anhängen
    strcat(USBDATA,Wert2); // anhängen
    strcat(USBDATA,Wert3); // anhängen
    strcat(USBDATA,Wert4); // anhängen
    strcat(USBDATA,Wert5); // anhängen
    strcat(USBDATA,Wert6); // anhängen
    strcat(USBDATA,Wert7); // anhängen
    strcat(USBDATA,Wert8); // anhängen
    strcat(USBDATA,"0D");  // anhängen
    das einzige was du beachten musst, ist even. das format deiner werte, sollte es probleme geben sollte aber jede hilfe klären

    mfg Lion

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Magge2k
    Registriert seit
    27.10.2004
    Beiträge
    163
    Ja gut nur möchte ich ja keinen String an einen String hängen sondern aus vielen char einen String bilden.

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    09.08.2004
    Ort
    Wien
    Alter
    40
    Beiträge
    208
    Hallo,

    was ist ein string und ein char? hm hm ? da gibt es kaum unterschiede bis auf das, dass der string begrenzt ist, zb (char test[10]), sonst ist da kein unterschied. und ausserdem ist es nicht besser wenn du für werte fixen bereicht nimmst? 2, 3 od 4 stellen? somit is egal welchen wert du hast, du hast immer deine fixe "wortbreite", wenn man es so nennen will.

    mfg Lion

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Magge2k
    Registriert seit
    27.10.2004
    Beiträge
    163
    ?!?

    Ich blick jetzt grad gar nix mehr.....

    wenn ich z.B. einen *String = "Hallo" habe

    Dann besteht der string doch aus Folgendem:

    H = 0x48
    a = 0x61
    l = 0x6C
    l = 0x6C
    o = 0x6F

    also stehen diese Werte doch irgendwie hintereinander?!?

    Nur muss ich die Hex-Werte ja gar nicht hinschreiben weil mein Compiler ja weiß das ein H, 0x48 entspricht. wenn ich das Wort zwischen die Anführungszeichen schreibe.

    Bei deiner Funktion da oben steht aber mein HEX-Wert den ich haben möchte zwischen den "" dies müssten dann aber zwei Werte sein zum einen 0x30 und zum anderen 0x44?!? oder sehe ich des falsch?

    Sorry ich verstehe aber gerade die Welt nicht mehr.

    Ich dachte irgendwie an so etwas:

    sprintf(output,"%c%c%c%c%c%c%c%c%c%c%c",0x02,DEVIC E,WERT0,WERT1,WERT2,WERT3,WERT4,WERT5,WERT6,WERT7, 0x0D);

    nur funktioniert des ganze nicht...

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Magge2k
    Registriert seit
    27.10.2004
    Beiträge
    163
    OK schwere Geburt!!!

    Aber jetzt endlich hab ich es doch noch geschafft!

    Code:
    char output[14];
    
    output[0] = 0x02;//STX
    output[1] = 0x33;//DEVICE
    output[2] = 0x48;//WERT0
    output[3] = 0x65;//WERT1
    output[4] = 0x79;//WERT2
    output[5] = 0x20;//WERT3
    output[6] = 0x48;//WERT4
    output[7] = 0x6F;//WERT5
    output[8] = 0x21;//WERT6
    output[9] = 0x21;//WERT7
    output[10]= 0x0D;//ETX
    
    cout << output << endl;
    Trotzdem danke an euch alle!

    gruß Marc

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress