🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

2回答

342閲覧

Python 変数に代入した値 int変換

raspypy

総合スコア247

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2019/12/03 04:13

##やろうとしていること

Python2.7において、変数に代入した2バイトの16進数を10進数に変換したい。

python

1data_hex = rec[-2:] 2print("RX: {0}".format(codecs.encode(data_hex, 'hex_codec')))

今、このプログラムの実行結果は、
RX: 029b となっています。

次のコードで、10進数への変換を試みましたが、

python

1data_dec = int(data_hex,16) 2print(data_dec)

エラーがでてしまいました。

text

1 data_dec = int(data_hex,16) 2ValueError: invalid literal for int() with base 16: '\x02\x9b'

値を書き入れれば、問題なく変換できるのですが、
変数(変換したい値が代入されている)を変換する場合は、intではなく、別の方法があるのでしょうか。

python

1data_dec = int('029b',16) 2print(data_dec)

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

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

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

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

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

guest

回答2

0

ベストアンサー

バイト列をデコードしたいときは、structモジュールを使います。

Python

1import struct 2 3data_hex = b'\x02\x9b' 4 5data_dec, = struct.unpack('>H', data_hex) 6print(data_dec)

投稿2019/12/03 04:47

LouiS0616

総合スコア35668

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

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

raspypy

2019/12/03 04:59

ありがとうございます。 data_dec = struct.unpack('>1H', data_hex) print(data_dec) として実行すると、 実行結果が (667,) となり、( ,)が付いてきてしまうのですが、なぜでしょうか。
LouiS0616

2019/12/03 05:02

回答に書いてあるとおり、data_dec, = と代入してください。 struct.unpackはタプルを返します。
raspypy

2019/12/03 05:46

回答ありがとうございます。 目的の値を取り出すことができました。 次の2つが分からず、調べてみたのですが、理解が間違えていましたら、指摘していただけると助かります。 ①struct.unpack(fmt, string)によって、 data_hexを1Hのフォーマットで取り出す。  struct.unpackは、タプルで返されるので、返されるデータは、(data_dec, )となる。  ※データが1つの場合でも、タプルで返される。 ②data_dec,= とする理由  ,= とすることで、タプルで返された値から、最初のデータ(数値)だけを取り出せる。
LouiS0616

2019/12/03 05:51

どちらも正しいように思います。 なお②については、data_dec, = struct.unpack(...) の代わりに data_dec = struct.unpack(...)[0] と書くこともできます。個人的には前者の方が直接的で好みです。
raspypy

2019/12/03 06:36

ありがとうございました。 とても勉強になりました。
guest

0

print(data_hex[0]|(data_hex[1]<<8))

でどうでしょう

投稿2019/12/03 04:38

y_waiwai

総合スコア88038

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

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

raspypy

2019/12/03 04:47

回答ありがとうございます。 いただいたコードを実行すると、 print(data_hex[0]|(data_hex[1]<<8)) TypeError: unsupported operand type(s) for <<: 'str' and 'int' となります。
y_waiwai

2019/12/03 04:49

ああ、byteじゃなくて文字列なのね って、print(data_hex) でなにがでてきますか?
raspypy

2019/12/03 06:36

いつも回答いただき、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問