Hex einem Stringarray zuweisen



  • Hallo Zusammen,

    um eine CRC-Berechnung durchzuführen möchte ich den Quellcode von
    http://www.zorc.breitbandkatze.de/crctester.c verwenden. Der scheint
    auch sehr gut zu funktionieren.

    Im Quellcode selber muss man lediglich den CRC-Rechner parametrieren und
    seinen gewünschten Datenwert, auf den die CRC-Berechnung durchgeführt
    werden soll, in das folgende Array schreiben:

    const unsigned char string[] = {"012345ABCDEF"};
    

    Nun mein Problem: die Daten, auf die ich die CRC-Berechnung durchführen
    möchte liegen in folgender Form vor:

    int test_value[16] = {1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1}; // 0xFA01
    

    Ich kann ja nicht einfach schreiben:

    const unsigned char string[] = {"FA01"};
    

    das führt nämlich zu einem falschen CRC-Wert. Ich wollte daher das Array
    test_value[16] in ein Hexwert umwandeln und anschließen den Hexwert in
    äquivalente Charzeichen wandeln.

    Daher meine Frage: gibt es vielleicht schon fertige Funktionen in C die
    mir aus Hex das entsprechende Char machen? Oder hat jemand sogar eine
    bessere Lösung für das Problem?

    Ich hatte bereits schon gegoogelt und immer bin ich entweder auf
    Funktionen für C# gestoßen oder die Quellcode vorschläge haben aus
    irgendwelchen gründen bei mir nicht funktoniert (wahrscheinlich fehlende
    Erfahrung, da ich noch Anfänger bin)

    Ich würde mich wirklich sehr über Hilfe freuen, da ich jetzt schon seit
    Wochen versuche eine einface CRC-Berechnung zu realisieren und mir schon
    die Zähne ausbeiße.

    Vielen Dank im voraus und viele Grüße



  • Dann wohl eher

    const unsigned char string[] = { 0xFA, 0x01 };
    


  • Th69 schrieb:

    Dann wohl eher

    const unsigned char string[] = { 0xFA, 0x01 , 0x00};  // Mit Terminator,  da in dem Beispiel strlen verwendet wird :-(
    


  • Vielen Dank für eure Antworten!

    Th69 schrieb:

    Dann wohl eher

    const unsigned char string[] = { 0xFA, 0x01 };
    

    Das bringt mich schon sehr viel weiter !

    DirkB schrieb:

    Th69 schrieb:

    Dann wohl eher

    const unsigned char string[] = { 0xFA, 0x01 , 0x00};  // Mit Terminator,  da in dem Beispiel strlen verwendet wird :-(
    

    Wenn ich noch eine 0x00 als Terminator dranhänge, dann ändert sich der komplette CRC-Wert. Ist der Terminator zwingend notwendig?

    Eine Frage hätte ich noch: ist es möglich der Variable(Array?) "string" einen Wert im Laufe des Programms zu zuweisen?

    also ähnlich wie folgt:

    void main(void)
    {
      const unsigned char string[];
      int test_value = 0xFA01;
    
      string = test_value;
    }
    

    Der Wert von "string" ist nämlich nicht immer fest, sondern ändert sich. Ich möchte das Programm aufrufen und dann "string" einen Wert zuweisen. Ohje.. ich hoffe, ich habe es nicht zu kompliziert erklärt.



  • Das Beispielprogramm des Autoren lässt viele Wünsche offen, dazu gehört auch dein genanntes Problem der Laufzeitdaten.
    Er hat offenbar die Algorithmen irgendwo zusammenkopiert um sie dann in ein untaugliches Testprogramm zu stecken.
    Dazu gehört die Verwendung von strlen statt sizeof.
    Ersetze alle strlen durch sizeof und du brauchst keine '\0' Terminierung.

    Variable int-Folgen zu Laufzeit sind komplizierter, da kannst du prinzipiell keine Arrays mehr verwenden.
    Du musst die int/unsigned char - Folge zur Laufzeit in dyn. Speicher einlesen, dir die Anzahl merken und an die Funktionen übergeben.

    Die Frage wäre auch, ob du dynamisch die Bitfolge oder gleich die ganze Zahl einliest,

    unsigned long long x;
    const char *zahl="1324567890";
    sscanf(zahl, "%llu", &x);
    ...
    crcbitbybit(&x, sizeof x);
    ...
    

    wobei auch hier die Byteorder des Typs zu berücksichtigen ist.


Anmelden zum Antworten