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.