[解決済み] Pythonで16進文字列の全バイトのxorチェックサムを作成する
2022-02-17 08:51:42
質問
BSS London Blu-80という音声処理装置と通信しようとしたところ、メッセージをXoringして作成したチェックサムを送信しなければならないことがわかりました。 送信されるメッセージの例は次のとおりです。
0x8d 0x1e 0x19 0x1b 0x83 0x00 0x01 0x01 0x00 0x00 0x00 0x4b 0x00 0x00 0xc2
0xc2がそのメッセージの正しいチェックサムである。
チェックサムは、メッセージ本文の全バイトを1バイトの排他的論理和(xor)にしたものです。
メッセージの本文は、上記のものからチェックサムを除いたものです。
しかし、私が試したコード。
packet = '0x8d 0x1e 0x19 0x1b 0x83 0x00 0x01 0x01 0x00 0x00 0x00 0x4b 0x00 0x00'
xor = 0
i = 0
while i < len(packet):
xor = xor ^ ord(packet[i])
i += 1
>>print xor
46
>>print hex(xor)
'0x2e'
私は明らかにここで何か間違ったことをしており、これを完全に理解していません。 何かお手伝いいただけると大変助かります。
ありがとうございます。
解決方法は?
を宣言しています。
packet
を
印刷可能な表現
のメッセージになります。
packet = '0x8d 0x1e 0x19 0x1b 0x83 0x00 0x01 0x01 0x00 0x00 0x00 0x4b 0x00 0x00'
ということは、現在のメッセージは
[0x8d, 0x1e, ..., 0x00]
でなく
['0', 'x', '8', 'd', ..., '0']
の代わりに だから、まずはそれを修正することです。
packet = '0x8d 0x1e 0x19 0x1b 0x83 0x00 0x01 0x01 0x00 0x00 0x00 0x4b 0x00 0x00'
packet = [chr(int(x, 16)) for x in packet.split(' ')]
あるいは、最初から "right"エンコードを検討することもできます。
packet = '\x8d\x1e\x19\x1b\x83\x00\x01\x01\x00\x00\x00\x4b\x00\x00'
この時点で、メンバーごとにxorすることができます。
checksum = 0
for el in packet:
checksum ^= ord(el)
print checksum, hex(checksum), chr(checksum)
チェックサムは
0x59
ではなく
0xc2
ということは、間違った計算をしたか、元のメッセージがあなたが提供したものでないかのどちらかです。
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] バイトを文字列に変換する
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] Pythonで文字列を小文字にするには?
-
[解決済み] Pythonで文字列を反転させる
-
[解決済み] Pythonで整数から文字列に変換する
-
[解決済み] Pythonでシングルトンを作成する
-
[解決済み] Python 3で文字列をバイトに変換する最良の方法?
-
[解決済み] Pythonで16進文字列をintに変換する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
Python LeNetネットワークの説明とpytorchでの実装
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み] TypeError: 'DataFrame' オブジェクトは呼び出し可能ではない
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].