Calcola Block Check Character (BCC) per la comunicazione seriale
-
23-08-2019 - |
Domanda
sto comunicando con un dispositivo via seriale tramite la classe SerialPort di .NET e basata su requisiti di specifica dispositivo di terze parti ho bisogno di calcolare un "carattere di controllo blocco". L'unica informazione che è stato detto è che si tratta di un OR esclusivo (XOR) e deve essere eseguita su tutti i caratteri.
Quindi, se ho la stringa "Bob, 001" come si potrebbe calcolare la BCC?
Soluzione
Molto probabilmente è XOR a carattere. Avrete bisogno di ottenere campioni di loro di verificare ma la maggior parte checksum di solito finiscono a 0.
Quindi, per un checksum XOR, si avrebbe il pacchetto:
Bob,001X
dove X è il checksum e, quando si XOR tutti quei personaggi insieme, si sarebbe più probabile ottenere 0.
Quindi, per lavorare fuori X, basta XOR tutti i personaggi di "Bob, 001". Questo è in virtù del fatto che N xor N è sempre 0, per ogni N.
Ora può essere che X sarà di due caratteri esadecimali se tutto ciò che è permesso di avere è alfanumerici. Ecco perché è necessario sia i dati di esempio (in modo che possiamo lavorare fuori), o una specifica adeguata (che dovrebbe essere fornito dal produttore del dispositivo).
Cosa è il dispositivo reale ti riferisci? Può essere c'è informazioni sul web che mostra come farlo.
sulla base degli:
Si tratta di un dispositivo di ospitalità PMS Amadeus. Non tutto quello che dicono è che deve essere eseguita su tutti i caratteri. escludendo la STX e ETX.
È necessario ottenere alcuni dati di esempio per confermare, ma è probabile che un flusso di dati qualcosa come:
Running
Data ChkSum
====== =======
STX 02
B 42 42
o 6f 2d
b 62 4f
, 2c 63
0 30 53
0 30 63
1 31 52
4 52 00
ETX 03
La posizione del checksum può variare e, in effetti, è il calcolo può variare anche se questo è molto meno probabile. Non credo molto di più può essere fatto senza dati di esempio o ulteriori informazioni da parte del fornitore. Una ricerca sommaria di Internet alzato nessun dettaglio tecnico.