質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
ASCII

ASCIIは、米国規格協会(ANSI)が制定したコンピューターの情報交換のための文字コードの一つ。アルファベットや数字などを1文字当たり7ビットで表します。英数字を表示する文字コードの中で最も高い互換性を持ち、多くの通信機器に利用されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

1回答

3352閲覧

pyserialで受信データの一部が勝手にASCII文字に変換されてしまう

mrhonen

総合スコア11

ASCII

ASCIIは、米国規格協会(ANSI)が制定したコンピューターの情報交換のための文字コードの一つ。アルファベットや数字などを1文字当たり7ビットで表します。英数字を表示する文字コードの中で最も高い互換性を持ち、多くの通信機器に利用されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2020/02/24 21:53

pyserialでシリアル通信を実施していますが、タイトル通り受信データの一部が勝手にASCII文字に変換されてしまう現象が起こります。
\x00\x00(\x00\x01\x00uT\x00C\x03のような内容です。
readline()でもread(1)を回す方法でも同様でした。
16進数のまま受信する方法があればご教授頂きたいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

コードや実際に行いたいことが質問に記載されていないのであまり具体的な回答はできませんが、一般論として回答します。

python3のbytes型の文字列表現を得た場合、ASCIIで印字可能なものについてはASCII文字で表されます。おそらくそういった現象が発生しているのではないかと思います。

python

1>>> b = b"\x54\xf9" 2>>> b 3b'T\xf9'

この場合、データとしてはバイナリで得られていますので、バイナリとして扱いたいときには特に対処は不要です。あくまでも表示上だけの問題と捉えてください。

python

1>>> b[0] 284 3>>> b[1] 4249

「16進数表記した文字列」が欲しい場合、bytes.hexメソッドが使用可能です。python3.8以降であればバイトの区切り文字も指定できるので、"\x"のような文字列を渡せば16進で書いたリテラルと相同の表記も得られるかと思います。

python

1>>> b.hex() 2'54f9'

組み込み型 — Python 3.8.2rc2 ドキュメント

投稿2020/02/24 22:09

編集2020/02/24 23:53
hayataka2049

総合スコア30935

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問