globale Variable zeichenweise auslesen



  • xoosksicskoox schrieb:

    char string1="E068A";

    Hier legst du auch nur einen char an und keinen string.
    Daher kommt auch nur ein Zeichen raus, weil nur eines drin steht.
    Warum der Compiler das akzeptiert ist mir nicht ganz klar...

    versuch mal:

    const char *string1 = "E068A"
    


  • It0101 schrieb:

    xoosksicskoox schrieb:

    char string1="E068A";

    Hier legst du auch nur einen char an und keinen string.
    Daher kommt auch nur ein Zeichen raus, weil nur eines drin steht.
    Warum der Compiler das akzeptiert ist mir nicht ganz klar...

    versuch mal:

    const char *string1 = "E068A"
    

    shit ich hab verpasst chat string1[]="...." zu schreiben hier im forum. ich habs im programm schon als array.

    const	char *code_arr3="E045";
    					int zahlarr[255];					
    
    						sscanf(code_arr3, "%1X", &zahlarr[0]);	
    							sscanf(code_arr3, "%1X", &zahlarr[1]);
    

    beim zweiten sscanf sollte er doch eigentlich die 0 einlesen?! also mit const char * geht es leider auch nicht



  • Natürlich geht das nicht automatisch weiter.
    Einen Zeiger hast du ja fast (durch das Array)
    Dann brauchst du nur noch den Offset.

    char string1[]="E068A";
    int string2, i;
    
    for (i=0;i<strlen(string1);i++)
    { sscanf(string1+i, "%1X", &string2); 
      mit string2 arbeiten;
    }
    


  • ich hab das mit dem offset probiert mit :
    sscanf(string1[1], "%1X", &string2);
    sscanf(string1[2], "%1X", &string2);

    ich dachte so mach ich das. das man da string1+i schreiben muss hät ich jetz nicht erwartet.

    tausend dank!



  • Willst du denn immer nur ein Zeichen lesen? Das was du dort im String1 hast ist doch eine ganze Hexadezimalzahl oder sind das mehrere einstellige, die nebeneinander liegen?



  • Es gibt ja auch einen großen Unterschied zwischen char und char*

    Mit string1[1] bekommst du auch ein char . Das Zeichen an der 2. Stelle
    Mit string1+1 bekommst du ein char* . Den Zeiger auf das Zeichen an 2. Stelle.



  • It0101 schrieb:

    Willst du denn immer nur ein Zeichen lesen? Das was du dort im String1 hast ist doch eine ganze Hexadezimalzahl oder sind das mehrere einstellige, die nebeneinander liegen?

    ja ich will alles extra, weil dann die umrechnung in dual für mich sehr einfach wird.

    Es gibt ja auch einen großen Unterschied zwischen char und char*

    Mit string1[1] bekommst du auch ein char. Das Zeichen an der 2. Stelle
    Mit string1+1 bekommst du ein char*. Den Zeiger auf das Zeichen an 2. Stelle.

    bei string1[1] meckert der compiler wenn ichs auslesen will und mit string1+i funktioniert alles wunderbar.



  • xoosksicskoox schrieb:

    bei string1[1] meckert der compiler wenn ichs auslesen will und mit string1+i funktioniert alles wunderbar.

    Scanf will vermutlich eine Variable vom Typ Char*.

    String1[1] ist aber nur ein Zeichen, also "char"

    string1+1 ist ein char*, nur halt im vergleich zu string1 um sizeof(char) verschoben.



  • DirkB schrieb:

    Es gibt ja auch einen großen Unterschied zwischen char und char*

    Mit string1[1] bekommst du auch ein char. Das Zeichen an der 2. Stelle
    Mit string1+1 bekommst du ein char*. Den Zeiger auf das Zeichen an 2. Stelle.

    xoosksicskoox schrieb:

    bei string1[1] meckert der compiler wenn ichs auslesen will und mit string1+i funktioniert alles wunderbar.

    Das ist klar, dass string1[1] nicht funktioniert wenn an der Stelle ein char* erwartet wird.
    Hast du das Verstanden was ich geschrieben habe?
    Den Unterschied zwischen char und char* ?
    Das ist wichtig in C.



  • jopp



  • xoosksicskoox schrieb:

    ja ich will alles extra, weil dann die umrechnung in dual für mich sehr einfach wird.

    Das ist doch kein ernsthafter Grund 😕



  • cooky451 schrieb:

    xoosksicskoox schrieb:

    ja ich will alles extra, weil dann die umrechnung in dual für mich sehr einfach wird.

    Das ist doch kein ernsthafter Grund 😕

    wieso nicht? ich hab ein 64 bit langen code, gegeben halt als HEX. wenn ich alles in 4Bit Schritte umwandel, is das extrem einfach wie ich finde. sicherlich gibts da noch andere wege



  • xoosksicskoox schrieb:

    sicherlich gibts da noch andere wege

    Ja:

    #include <stdlib.h>
    #include <stdio.h>
    
    void print_bin(long val)
    {
      int i = 0;
      while ((val >> ++i))
        ;
      while (i)
        printf("%i", (val >> --i) & 1);
    }
    
    int main()
    {
      const char *str = "E068A";
      print_bin(strtol(str, 0, 16));
    }
    

Anmelden zum Antworten