2017-01-30 6 views
0

RS232形式で出力する超音波センサーから文字を読み込んでいます - Rに4桁の数字を続け、その後にキャリッジリターン、例えば 'R1597 \ r 'rs232センサーのキャラクターにはpythonの前に 'b'が付いています3

python3ではb'R1597 \ r 'になるように' b 'が先行します。スタックオーバーフローに関する他の関連する質問を検索しましたが、理解しているように、これは文字がバイトリテラルで、 'b'が実際のデータにないことを示しています。しかし、コード。

char=ser.read() 
while char != 'R': 
    ....... 

は動作しません。「R」が到着するのを永久にループします。

しかし、コードを使用すると、

char=ser.read() 
while char != b'R': 
..... 

b'R 'が到着してから次のコードに進むまでループします。

今私は混乱していますが、python3は私が今取り除かなければならないデータから 'b'を入れましたか?

ご迷惑をおかけして申し訳ありません。

乾杯。

+0

[Python3でバイナリファイルを読み込んでいるときに、なぜ 'b'が自分のコンテンツの前に追加されるのですか?](http://stackoverflow.com/questions/15845074/in-python3-when-imバイナリファイルの読み込み - なぜ-b-b-pre-my-prepended-my-c) –

答えて

0

いいえ、bはあなたのデータに注入されません。 bは、リテラル'R'を文字列リテラルではなくバイトとして解釈する必要があることをPython 3に伝えます。文字列文字は、基礎となるエンコーディング(UTF-8、UTF-16など)に応じて単なるバイト以上のものになることがあります。あなたはRS-232の場合、7ビットのASCII文字(つまりバイト)を受け取っているので、bはバイトをバイトと比較していることを保証します。バイトリテラルの詳細については、Python 3マニュアルのSection 2.4.1を参照してください。

関連する問題