Konvertierung ASCII -> Dec



  • Hallo zusammen,

    ich bin c++ anfänger und komme bei folgenden kleinen Problem nicht weiter.

    Ich schreibe unter Linux ein kleines Konsolenprogramm, welches Funktionen einer DLL aufruft. Es klappt auch alles - aber bei einem Parameter einer Funktion komme ich nicht weiter.

    Die Funktion CR99 hat folgende Parameter:

    int connectionId,
    int deviceAddress,
    const char * name,
    int nameType,
    char * value,
    int valueLength,
    int * errorNumber

    Der Problematische Parameter ist der 3. Beschreibung des Parameters:
    "Zeichenfolge mit dem Namen der Variablen. Oder im ersten Byte der Zeichenfolge steht der Index der anzusprechenden variablen."

    Ich möchte also das erste Byte der Zeichenfolge nutzen.

    In meiner Konsolenanwendung übergebe ich 2 Parameter beim Aufruf. Bsp:

    konsolenapp 192.168.0.1 5

    Der Zweite Parameter (5) soll an die Funktion CR99 Parameter 3 übergeben werden.

    struct CommonInfo {
    
            char szErrorMsg[254];
            ...
            char szHost[80];
            int globvarnr[1];
    
    } g_CommonInfo;
    
    int main(int argc, char* argv[])
    {
            char* ip = argv[1];
            strcpy((char*)g_CommonInfo.szHost, ip);
            char* NrGV = argv[2];
            strcpy((char*)g_CommonInfo.globvarnr, NrGV);
    
    rueckgabewert = CR99(1, 254,g_CommonInfo.globvarnr, 0, globvar, 5, &iError);
    

    Problem ist, dass im Logfile der DLL nicht 5 übergeben wird, sondern 53. Laut ASCII Tabelle ist das Dezimal und entspricht der 5 in ASCII.

    Schreibe ich vor die Funktion folgendes:

    g_CommonInfo.globvarnr[0] = 0x05;
    

    funktioniert es wie gewünscht.

    Die Lösung ist sicher einfach, aber ich komme einfach nicht drauf. 😮



  • g_CommonInfo.globvarnr[0] = argv[2][0] - '0';
    

    //edit: Warum ist globvarnr ein int[1] ?? Die Funktion erwarted doch einen Pointer auf char !?



  • Subtrahiere einfach '0' von der '5'.

    Es gilt: '5' - '0' = 5



  • Swordfish schrieb:

    Warum ist globvarnr ein int[1] ?? Die Funktion erwarted doch einen Pointer auf char !?

    Vielen lieben Dank, das war die Lösung!

    Das int war noch von einem Test übrig 🙂