2016-04-07 6 views
1

Ich habe eine, was ich denke, einfache Frage, aber leider kann die Lösung nicht auf eigene Faust finden.Verwendung von Hex-Wert von fileGetString in anderen Array

Ich habe ein Array mit Hex-Daten in TXT-Datei (z. B. 0x01 0x02 [...]) und möchten diese Daten für eine andere Funktion verwenden. Zweck ist, einige Teile des Arrays (in diesem Beispiel Array-Nummer 100) zusätzlich zu statischen Werten zu verwenden, die sich nicht ändern und eine Anfrage an ein Steuergerät senden.

wenn ich die Daten mit fileGetString aus der Datei lesen und es auf Konsole drucken, wäre es in Ordnung (wie 0x01 0x02 und so weiter).

Wenn ich versuche, es für die Funktion zu verwenden, sehen Sie unten, es nicht den richtigen Hex-Wert (z. B. StringLongWrite [100] = 0xFF), sondern in Trace-Daten nur "30".

Also die gesendete Anfrage wäre 11 12 13 30 statt 11 12 13 FF, für das folgende Beispiel.

Gibt es eine einfache Möglichkeit, dies zu beheben? (ursprünglich hatte ich die Daten, die ich schreiben möchte, im Format "01 02 03 ... FF ..." in der .txt-Datei und habe diese bereits in die Daten "0x01 0x02 0x03 ... 0xFF ..." konvertiert falls der erste Datentyp einfacher zu bedienen ...)

Vielen dank und Grüße Robert

case 1: /* write memory */ 
      if(something); 

     glbHandleWrite = openFileRead ("test.txt",0); 

     if (glbHandleWrite != 0 && fileGetString(StringLongWrite, elcount(StringLongWrite), glbHandleWrite) != 0) 
     { 
     SendReq[0] = 0x11; 
     SendReq[1] = 0x12; 
     SendReq[2] = 0x13; 
     SendReq[3] = StringLongWrite[100]; 
     SendRequest(ServicePhys, 4); 
     setTimer(TimeOutTimer, TimeOutLong); 
     write ("data %s", StringLongWrite); 
     break; 
     } 

     else write("Data file cannot be opened "); 

Antwort

1

0x30 wird den ASCII-Code für das Zeichen '0'.

Sie müssen die Zeichenfolge "0x30" in eine Zahl konvertieren, z. mit strtol():

on start 
{ 
    message 0x123 msg; 
    char StringLongWrite[32] = "0x01 0x02 0x03"; 
    long data[2]; 
    dword pos = 0; 

    pos = strtol(StringLongWrite, pos, data[0]); 
    pos = strtol(StringLongWrite, pos, data[1]); 
    pos = strtol(StringLongWrite, pos, data[2]); 

    write("0x%02x,0x%02x,0x%02x", data[0], data[1], data[2]); 

    msg.dlc = 8; 
    msg.byte(0) = 0x42; 
    msg.byte(1) = data[0]; 
    msg.byte(2) = data[1]; 
    msg.byte(3) = data[2]; 

    output(msg); 
} 
+0

Vielen Dank für Ihr Feedback sergej, werde ich versuchen, Ihre Lösung zu verstehen und zu verwenden. zu schätzen und mit freundlichen Grüßen Robert – Robertk2016

+0

@ Robertk2016 Gern geschehen. – sergej

+0

@ Robertk2016 Bitte lassen Sie mich wissen, wenn es für Sie funktioniert. – sergej

Verwandte Themen