Ich habe eine App, in der ich ein Paket an ein externes Gerät senden muss. Dieses Paket hat vor der Endnachricht einen CRC. Der CRC muss in CRCH und CRCL getrennt sein. Zum Beispiel: CRC = 0x5B also CRCH sollte 0x35 (ASCII-Darstellung von 5) und CRCL sollte 0x42 (ASCII-Darstellung von B) sein. Ich suchte im Internet und ich fand mehrere Funktionen in C oder in einer anderen Sprache, um CRC32 zu erstellen, aber mein Gerät muss einen CRC8 verwenden. Wie kann ich ein CRC8 in Objective-C erstellen? Kannst du mir helfen, einen Weg zu finden, dies zu tun?Berechnen Sie CRC 8 in Ziel c
Antwort
Überraschend, wie diese ziemlich einfache Frage immer noch nicht beantwortet wird.
Zuerst müssen Sie Probleme in Ihrer Frage trennen. CRH und CRL sind nur Hex-Konvertierung und das ist einfach zu tun (und hat auch viele Beispiele im Internet). In den meisten Fällen müssen Sie nur crc vergleichen, die Sie erhalten haben, mit einer, die Sie berechnet haben. Also müssen Sie sie nur in die gleiche Form konvertieren. Z.B. wandle das von dir berechnete crc im Sprintf- und% 2X-Format in Text um und vergleiche es mit CRC, das du erhalten hast (als Text).
Der zweite Teil ist eigentlich CRC. Dies ist ein wenig komplizierter. Ihre Optionen lauten wie folgt:
1) Am einfachsten ist es, Ihre .m-Datei in .mm umzubenennen und die CRC-Bibliothek von Boost C++ zu verwenden. Es ist nur ein Header-Include, so dass es den Rest des Codes in keiner Weise beeinflusst und du kannst es sogar in einer separaten Datei erstellen, also hast du eine C-Funktion, die Boost unter der Haube nutzt. Sie müssen jedoch möglicherweise Parameter für Ihre CRC finden. Dafür sehen Sie diese ausgezeichnete Ressource http://reveng.sourceforge.net/crc-catalogue/
2) Sie können Ihre eigene Implementierung schreiben. Überraschenderweise gibt es viele Beispiele für bestimmte Algorithmen im Internet, aber sie sind oft für bestimmte CRC optimiert und für andere Algorithmen schwer zu übernehmen.
Also, Ihre beste Wette beginnt wahrscheinlich mit "A Schmerzfreie Anleitung zu CRC Error Detection-Algorithmen" Artikel von Ross Williams. Es enthält auch Beispiele in C. Obwohl es kompliziert sein könnte, sich um alle technischen Sachen und Erklärungen dort zu kümmern.
Also, als Abkürzung möchte ich vorschlagen, meine eigene Implementierung in Java here zu betrachten. Es ist offensichtlich nicht Objective-C. Aber ich habe es durchgesehen und Sie sollten in der Lage sein, einfach in Ihre .m-Datei zu kopieren und einzufügen und sie einfach zu kompilieren. Möglicherweise einige Arten anpassen.
Sie benötigen public static long calculateCRC (Parameter crcParams, byte [] data) und private static long reflect-Funktionen (long in, int count). Und die Parameter-Klasse, die erschreckenden aussieht, soll aber nur eine Struktur in Ihrem Fall wird:
struct Parameters
{
int width; // Width of the CRC expressed in bits
long polynomial; // Polynomial used in this CRC calculation
bool reflectIn; // Refin indicates whether input bytes should be reflected
bool reflectOut; // Refout indicates whether input bytes should be reflected
long init; // Init is initial value for CRC calculation
long finalXor; // Xor is a value for final xor to be applied before returning result
}
Vielleicht wollen Sie auch auch Typen anpassen es zu einem kürzeren Typ ohne Vorzeichen (Java hat keine unsigned). Aber es sollte so gut funktionieren wie es ist.
- 1. Berechnen von Modbus RTU CRC 16
- 2. berechnen CRC 8 der empfangenen Daten auf dem seriell Port C#
- 3. endgültiger CRC für C
- 4. CRC-Berechnung in Java
- 5. Tactic teilweise berechnen Ziel in Coq
- 6. SourceSafe CRC-Berechnung
- 7. CRC-Fehlerkorrekturbibliothek?
- 8. Machen Sie CRC auf stm32 mit Software-Implementierung übereinstimmen
- 9. HTML in Ziel C
- 10. wie in Ziel c
- 11. com.android.camera.action.CROP in Ziel-c?
- 12. Überprüfen Sie die Verfügbarkeit der Funktionen watchOS 3 Xcode 8 vs watchOS 2 in Ziel c
- 13. Caret in Ziel C
- 14. in objectAtIndex Ziel c
- 15. Flucht% in Ziel c
- 16. __OBJC__ in Ziel C
- 17. Konstruktor in Ziel c
- 18. CRC-32-Feld in zip
- 19. Beschleunigen Sie meine Indizes in MySQL - CRC oder MD5?
- 20. Ziel c vergleichen Bereich schneidet
- 21. Mit Java 8 java.time.LocalDate können Sie das chinesische Neujahrsdatum berechnen?
- 22. Text Validierung in Ziel c
- 23. In Ziel-C-Datumsauswahl Ausgabe
- 24. Berechnen Sie NPS in Ruby
- 25. Ziel C: Programmatically erstellen Sie ein UIImageView
- 26. Wie crc16 in PHP zu berechnen
- 27. Implementieren Sie ein Autocomplete-Textfeld Ziel C
- 28. berechnen Sie den Speicher von C++ Karte
- 29. CRC-5 korrekte Berechnung?
- 30. C#: So berechnen Sie das Seitenverhältnis