String in eine Hexzahl convertieren



  • Hallo !!

    Ich habe in einer ACCESS-Datenbank Hexwerte gespeichert. Diese sind jedoch
    vom Datebtype CString´s. Nun möchte ich jedoch über die Serielle Schnittstelle
    gerne diese definierten commandos senden. Der Sinn ist das der user seine adrr. der Hardware anpassen bzw ändern kann.

    vorher
    zb. char cmd = 0x87;
    Send(cmd);

    aus db:

    char cmd = GetCommand(Z_INIT);
    Send(cmd);

    Hier ein kleine Code dazu:

    // ***************************************************************
    // * Get the selected command from the cmd-database in HEX       *
    // ***************************************************************
    char* CHandlingCmdDlg::GetCommand(int cmd)
    {
      char    rw[5];
      char    test = 0x87;
      CString dummy;
      CString msg;
    
      memset(rw, 0, sizeof(rw));
    
      if(!CmdTab.IsOpen())
          CmdTab.Open();
    
      for(CmdTab.MoveFirst(); !CmdTab.IsEOF(); CmdTab.MoveNext())
      {
        switch(cmd)
        {
          case MSG_Z_INIT:
        if(CmdTab.m_Command == "Z_INIT")
        {
          dummy = CmdTab.m_Value;
          //long  lvalue = strtol(
          for(int i= 0; i<4; i++)
          {
            rw[i] = dummy.GetAt(i);
          }
          rw[5] += '\0'; // --> test
          msg.Format("Char value: %x Test char vlaue: %x",*rw ,test);
          MessageBox(msg, "debug info", MB_OK);
          return rw;
        }   
           break;
           // usw....
    

    Vieleicht hatte einer von Euch schon mal ein änlicher Problem.

    Viele Grüße
    Michael



  • Ich bin mit nicht sicher ob du das meinst:

    int val;
        sscanf("ffa","%x",&val);
        ASSERT(val == 0xffa);
    


  • Nein mein Problem ist es aus einen CString einen Hex-wert einer char Variable
    zuzuweisen. Z.B Wenn ich auf nen port was schreiben will hab ich das bis jetz immer so gemacht. Die defines waren in ner eigenen hader (motion.h)
    :

    #define MOVE_LEFT  0x10;
    #defien MOVE_RIGTH 0x20;
    
    char base_adrr = 0x180;
    
    outp(base_adrr, MOVE_LEFT);
    

    Es endert sich aber immer heufiger die Hardware und somit auch die cmd´s. Da hatte ich die idee diese in ner Datenbank zu speichern, da man sie dort im
    Programm sehr leicht editieren kann. Das Problem mit Access ist jedoch es
    gibt keinen char bzw hex datentype. Deshalb suche ich nach nen weg diesen
    CString in eine wirkliche Hex-zahl umzuwandeln, mit der man z.b auch rechnen
    könnte. Bei meinen bisherigen versuchen hab ich jedoch immer nur ein array von
    char´s bekommen. Wenn ich mir dein Beispiel jedoch näher betrachte könnte das
    auf dies Art jedoch auch mit nen char anstelle des integers gehen. Werds mal
    mit diesen Ansatz probieren.

    Viele Grüße, und Danke für den Tipp
    Michael



  • Hallo Nemesyzz !

    He Super!, es funzt nochmals Danke für deinen Super Tipp.
    Gebe jetzt einfach nen int zurück und caste den dan auf nen char.

    Viele Grüße
    Michael


Log in to reply