これを投稿するための完全なツールのように感じます。これは非常に基本的なものであり、この問題で過去 2 日間を無駄にしたとは思えません。これで見つけられるすべての解決策を試しましたが(真剣に、インターネットの履歴をお見せします)、役に立ちませんでした. 問題は次のとおりです。
uC からのシリアル文字列を解析しています。長さは 52 バイトで、データのさまざまな変数が多数含まれています。パック 2 進化 10 進数でエンコードされたデータ。
元:.....blah.....0x01 0x5E .....blah
16 進数の 015E は 10 進数で 350 になります。これが私が望む価値です。シリアル文字列を問題なく読み取っています。binascii.hexifiy を使用してバイトを出力し、正しいことを確認しました。私が使う
data = ser.read()
改行が受信されない場合は、データを配列に配置します。配列をバイト配列、リスト、見つけることができるものにしようとしましたが、どれも機能しません。
必要な 2 バイト セクションを定義済みメソッドに送信したいと考えています。
def makeValue(highbyte, lowbyte)
アンパック、結合、パック、ビット操作、文字列集中を使用しようとすると、同じ問題が発生し続けます。
0x01 と 0x5E は有効な int 番号 (見出しの開始と ASCII の ^) ではないため、機能しません。有効な int ではないため、最初に数字を結合することさえできません。
using hex(): hex argument can't be converted to hex.
Joining the strings: invalid literal for int() with base 16: '\x01^'
using int: invalid literal for int() with base 10: '\x01^'
Packing a struct: struct.error: cannot convert argument to integer
真剣に、ここで本当に基本的な何かが欠けていますか? 私が見つけることができるすべての例は、上記のすべての関数を完全に利用していますが、16 進数 '0x1234' を特定しているか、変換している数値が実際の ASCII 数値です。助けてください。
編集 私はそれを手に入れました、ch3kaは私を正しい軌道に乗せました、ありがとう!
以前はうまくいかなかった理由はわかりませんが、両方の値を16進数にしました
one = binascii.hexlify(line[7])
two = binascii.hexlify(line[8])
makeValue(one, two)`
そして、ch3ka で定義された char makeValues を使用しました。
def makeValue(highbyte, lowbyte)
print int(highbyte, 16)*256 + int(lowbyte, 16)
再度、感謝します!!!