2016-06-06 30 views
-1

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

+0

Bitte geben Sie Ihren Code ein. Wir können Fehler in Ihrem Code nicht erkennen ... ohne es zu sehen. – GhostCat

+0

Also, ich bitte Sie, eine Methode in Java zu schreiben. So etwas wie: public byte [] getLowHighBytes (byte [] someArray) {...} –

+2

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

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; 
}