以下のサイトで、
010400000001を入力して、Hexチェックに入れて出力すると
CRC-16 (Modbus) 0xCA31という結果が出力されます。
リンク内容
一方で以下のサイトを参考に
プログラムを実行しても同様の結果にはなりませんでした。
リンク内容
python
1# -*- coding: utf-8 -*- 2 3# エラーチェック以外のクエリ 4command = b"\x01\x04\x00\x00\x00\x01" 5 6# 最初のCRCレジスタ値をFFFFhに設定 7crc_registor = 0xFFFF 8for data_byte in command: 9 # CRCレジスタとデータバイトのXOR 10 tmp = crc_registor ^ data_byte 11 # シフト回数を記憶 12 shift_num = 0 13 # シフトが 8回になるまで繰り返す 14 while(shift_num < 8): 15 if(tmp&1 == 1): # 桁あふれが1なら 16 tmp = tmp >> 1 17 shift_num += 1 18 tmp = 0xA001 ^ tmp 19 else: 20 tmp = tmp >> 1 21 shift_num += 1 22 # 計算結果をcrc_registorにセット 23 crc_registor = tmp 24# 計算結果をbytes型へ変換 25crc = crc_registor.to_bytes(2, 'big') 26 27# 結果を表示 28print(crc)
b'\xca1'
同じ結果(0xCA31)を得るためにはどうすればよいでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/16 05:13
2020/04/16 05:29