現在、RS485経由で電気メーターに接続しようとしています。 これまでのところかなりうまくいきましたが、メーターがRS485回線に書き戻している内容を読むのに問題があることを除けば、16進バイトの正しい解釈が浮動小数点に変換されます
私はDocklightと製造元の内部プログラマで読むことができるので、電気計器のデータは正しいことを知っています。
私の唯一の問題は、私が戻ってくる16進バイトの変換です。私は
>>> b'\x01\x03\x04Ce/\xec\xe2'
を受け付けております
これは、8または9進バイトである必要があります。 は、私はこの問題は、それが、私ので、非16進数で、さらにそれを変換することはできませんwhereever Pythonは「ASCII」でそれを解釈することであるように思わ
>>> b'\x01\x03\x04\x43\x67\x81\xEC\x43\x68'
のようなものを受け取ることを期待しています。 そして、私は反対側から見たときに私が手にエラーが
>>> binascii.Error: Non-hexadecimal digit found`
同等です。 私は
だから私が言うことができるどのようにそれを印刷するとき
>>> bytearray(b'\x01\x03J8\x00\x02S\xde')
として表示され
>>> data=bytearray([0x01,0x03,0x4A,0x38,0x00,0x02,0x53,0xDE])
を送信していますのpython-3、私は8進バイトではなく、いくつかを見てみたいです彼が自動的に作った解釈?私は、一度あなたがどこを探したらいいのか分かりにくい何かに行方不明と信じています。
バイト4,5,6,7をfloatに変換したいとします。しかし、それは私に16進数ではない数字を表示しているので、私はそれを行うことはできません。
なぜこれらのバイトは16進数で必要ですか?コードをデバッグしようとしていて、バイトの内容を16進数で知りたいのですか、またはこのデータをプログラムのユーザーに表示する必要がありますか?ここではデバッグ情報を見ていますが、エンドユーザーフレンドリーな表現ではありません。 –
これらのバイトを整数に変換したい場合は、 'int.from_bytes'メソッドを見てください。 –
16進数字を浮動小数点に変換する予定はありますか?通常、バイト値を使用します。これらの値はまだすべてです。 –