2017-03-20 13 views
0

pyserialを使用してrs232データを送受信しようとしていますが、正しいデータを正しく送信する方法がわかりません。私が持っている少しの情報は、データ文字列を説明し、それが高低のニブルに分割されるべきだと言います。ニブルに変換することは、私が得ることのできない部分です。私はそれを読んでみましたが、私の場合はそれをどうやって使うのか分かりません。Pythonで高および低ニブルにバイトを分割

私はシリアル経由で送信するこのデータ文字列を持っています。 10,00,00,00,00,00,0A、20,20,20,20,00,00,00,00,00,00,00,50

バイトを上位および下位ニブルに変換し、21バイトを42文字のデータ文字列に変換します。

誰かが私のためにこれを行う方法を説明できますか?

+1

これは試しただけでなく、宿題のように聞こえますか? – Vallentin

+0

残念ながら私は試してみましたが、それを動作させるのに十分理解していません。私はそれが高および低バイトにどのように行くのかを調べるが、それはそれぞれの文字ですか?だから "ab"はaに2バイト、bに2バイトを持つだろうか?それはおそらく間違っているので、私は助けを求めました。私はそれが宿題であり、先生に私がちょうど尋ねることができることを望みました。 – Spacefigher

+0

私の答えを見てください – Vallentin

答えて

1

バイトの上位と下位のニブルを取得したい場合。換言すれば、8ビットを4ビットに分割する。 byte = "16"ため1 6を印刷し

high, low = byte[:1], byte[1:2] 
print(high, low) 

を:データ列を考慮

は、あなたが簡単に行うことができ、進数としてバイトの文字列です。 int(high, 16)int(low, 16)を使用して小数点に変換できます。あなたはすでに、あなたが行うことで、高および低ニブルを抽出することができますint(byte, 16)を使用して、10進数に16進数に変換した場合

high, low = byte >> 4, byte & 0x0F 
print(hex(high), hex(low)) 

彼らは十六進に変換しているので、byte = 0x16ため0x1 0x6を印刷することになりますhex(x)を使用してください。 hex(x)には接頭辞0xが追加されています。 hex(x)[2:]を実行して削除することができます。

としてだからあなたのデータ列を考慮し

バイトを生み出す
bytes = "10,00,00,00,00,00,16,0A,20,20,20,20,00,00,00,00,00,00,00,00,50" 
bytes = bytes.split(",") 

for byte in bytes: 
    byte = int(byte, 16) 
    high, low = byte >> 4, byte & 0x0F 

    print(hex(byte), hex(high), hex(low)) 

、高ニブル:

その後
bytes = "10,00,00,00,00,00,16,0A,20,20,20,20,00,00,00,00,00,00,00,00,50" 

それぞれハイとローのニブルを印刷するには、このような何かを行うことができます低ニブルはすべて16進数で表示されます。あなたはビット("{0:08b}".format(byte))でそれを持っている場合

はまた、あなたは今high, low、それぞれが自分の4ビットを有する、このhigh, low = bits[:4], bits[4:8]ようにそれを分割することができます。

関連する問題