Ich habe mit dem Problem mit CRC16 Algorithmus aufgetreten. Es gibt eine Kette von Hex 80 01 F0, nach CRC16 bekomme ich das Low-Byte = 23 und die High-Eins = 80. Also, die Frage ist, wie man diese zwei Bytes berechnet? Ich habe die CRC-Rechner ausprobiert, aber es gab kein Ergebnis. Außerdem wäre es perfekt, wenn es ein Beispiel für diese Methode in Java gibt. Im Handbuch gibt es zusätzliche Informationen: Low-und High-Byte eines Vorwärts-CRC-16-Algorithmus mit dem Polynom (X16 + X15 + X2 + 1) auf allen Bytes berechnet. Es wird mit dem Seed 0xFFFF initialisiert.Berechnen Low und High Bytes CRC16 - Java
-1
A
Antwort
0
Vielen Dank für Ihre Antworten. Ich bin zuversichtlich, dass meine Antwort für andere nützlich sein wird. Getesteter und funktionierender Code.
private static byte[] getCRC16LowHighBytes(byte[] byteSequence) {
// Create a byte array for Low and High bytes
byte[] returnBytes = new byte[2];
int crc = CRC16_SEED;
for (int i = 0; i < byteSequence.length; ++i) {
crc ^= (byteSequence[i] << 8);
for (int j = 0; j < 8; ++j) {
if ((crc & 0x8000) != 0) {
crc = (crc << 1)^CRC16_POLINOM;
} else {
crc <<= 1;
}
}
}
byte[] crcBytes = getBytes(crc);
// The first two bytes of crcBytes are low and high bytes respectively.
for (int i = 0; i < returnBytes.length; i++) {
returnBytes[i] = crcBytes[i];
}
return returnBytes;
}
private static byte[] getBytes(int v) {
byte[] writeBuffer = new byte[4];
writeBuffer[3] = (byte) ((v >>> 24) & 0xFF);
writeBuffer[2] = (byte) ((v >>> 16) & 0xFF);
writeBuffer[1] = (byte) ((v >>> 8) & 0xFF);
writeBuffer[0] = (byte) ((v >>> 0) & 0xFF);
return writeBuffer;
}
Bitte geben Sie Ihren Code ein. Wir können Fehler in Ihrem Code nicht erkennen ... ohne es zu sehen. – GhostCat
Also, ich bitte Sie, eine Methode in Java zu schreiben. So etwas wie: public byte [] getLowHighBytes (byte [] someArray) {...} –
Und ich sage Ihnen, dass stackoverflow ** nicht ** ein Code Delivery Service ist. Wir helfen bei spezifischen Problemen nicht mit "Ich habe eine Vision, aber keinen Plan; bitte anweisen". Wir ** tun ** deine Arbeit nicht für dich. – GhostCat