.NET の SerialPort クラスを介してシリアル経由でデバイスと通信しています。サードパーティのデバイス仕様要件に基づいて、「ブロック チェック文字」を計算する必要があります。私が聞いた唯一の情報は、これは排他的 OR 演算 (XOR)であり、すべての文字に対して実行する必要があるということです。
では、「Bob,001」という文字列がある場合、BCC はどのように計算するのでしょうか?
.NET の SerialPort クラスを介してシリアル経由でデバイスと通信しています。サードパーティのデバイス仕様要件に基づいて、「ブロック チェック文字」を計算する必要があります。私が聞いた唯一の情報は、これは排他的 OR 演算 (XOR)であり、すべての文字に対して実行する必要があるということです。
では、「Bob,001」という文字列がある場合、BCC はどのように計算するのでしょうか?
ほとんどの場合、文字ベースの XOR です。それらのサンプルを取得して検証する必要がありますが、ほとんどのチェックサムは通常 0 になります。
したがって、XOR チェックサムの場合、パケットは次のようになります。
Bob,001X
ここで、X はチェックサムであり、これらすべての文字を XOR すると、ほとんどの場合 0 になります。
したがって、X を計算するには、「Bob,001」のすべての文字を XOR するだけです。これは、任意の N に対して N xor N が常に 0 であるという事実によるものです。
許可されているのが英数字だけの場合、X は 2 つの 16 進文字になる可能性があります。そのため、サンプル データ (私たちが解決できるようにするため) または適切な仕様 (デバイス メーカーが提供する必要があります) が必要です。
あなたが言及している実際のデバイスは何ですか?それを行う方法を示すウェブ上の情報があるかもしれません。
更新に基づく:
これはアマデウス ホスピタリティ PMS デバイスです。彼らが言うのは、すべての文字に対して実行する必要があるということだけではありません。STXとETXを除く。
確認するにはサンプル データを取得する必要がありますが、次のようなデータ ストリームになる可能性があります。
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
チェックサムの位置は変わる可能性があり、実際、その計算も変わる可能性がありますが、その可能性ははるかに低くなります。サンプル データやベンダーからの追加情報がなければ、これ以上のことはできないと思います。インターネットをざっと検索しても、技術的な詳細は見つかりませんでした。