pythonでCRC-16を計算しています。コードは以下です。
python
1command = b"\x01\x06\x00\x7D\x00\x08" 2#初期のバイト 3 4# 最初のCRCレジスタ値をFFFFhに設定 5crc_registor = 0xFFFF 6for data_byte in command: 7 # CRCレジスタとデータバイトのXOR 8 tmp = crc_registor ^ data_byte 9 # シフト回数を記憶 10 shift_num = 0 11 # シフトが 8回になるまで繰り返す 12 while(shift_num < 8): 13 if(tmp&1 == 1): # 桁あふれが1なら 14 tmp = tmp >> 1 15 shift_num += 1 16 tmp = 0xA001 ^ tmp 17 else: 18 tmp = tmp >> 1 19 shift_num += 1 20 # 計算結果をcrc_registorにセット 21 crc_registor = tmp 22# 計算結果をbytes型へ変換 23crc = crc_registor.to_bytes(2, 'big') 24 25# 結果を表示 26print(crc) 27
上記のコードを実行すると
terminal
1b'\x14\x18'
このような答えが返ってきます。この値は正しいです。
ただ初期バイトを
python
1command = b"\x02\x06\x00\x7D\x00\x08"
として実行すると
terminal
1b"'\x18"
こんな風に返ってきてしまいます。
他にも何個か別の初期バイトで試しており、それらは正しい答えが返ってきているのですが
\x02\x06\x00\x7D\x00\x08
このバイトの時だけ
'\x18
という答えが返ってきています。
詳しい方お力をお借りしたいです。
あくまでCRC-16の計算ツールとしてこのプログラムを使用しているので
\x02\x06\x00\x7D\x00\x08
のCRC-16だけわかれば正直問題ないです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/10 00:00