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

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

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1122閲覧

byte列をstruct.upackでintにしたいがtupleになってしまう

kyontami11

総合スコア2

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/03/10 12:26

前提・実現したいこと

python 初心者なのですが 
バイナリ―のバイト列からデータを切り出して
計算をしたい

発生している問題・エラーメッセージ

エラーメッセージ

 TypeError:can only concatenate tuple(not"int") to tuple

該当のソースコード

 python ソースコード ```簡略化してあります from struct import * data0 = bytearray(4) data0[0] = 0x10 data0[1] = 0x12 data0[2] = 0x22 data0[3] = 0xff data1 = unpack('>i',data0) data2 = 344 data1 += data2  #ここでエラーが出ます。 ### 試したこと Unpackのところをint()の中に入れてみましたが TypeError:int()argument must be a string, abytes-like object or a number, not 'tuple' が出ました。 ### 補足情報(FW/ツールのバージョンなど) python 3.6.7 windows 10 ここにより詳細な情報を記載してください。

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

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

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

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

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

ppaul

2021/03/10 12:38

これで何をしたいのですか?
kyontami11

2021/03/10 12:46

ソースは簡略化しているのですが、バイナリーのデータをファイルから読み込んで、その中の4byteを合わせて整数としてそのデータを使って整数計算を行いたいのです。
ppaul

2021/03/10 12:58

269624063があっていないような気がしたのですが、リトルエンディアンなのを忘れていました。計算はあっていますね。 C言語とのインタフェースをとるのでなければ、 0xff+0x22*256+0x12*256*256+0x10*256*256*256 で計算してもよいのかなと思いました。
kyontami11

2021/03/10 13:39

ありがとうございます。 データは大量にあるため計算は煩雑になりそうです。
guest

回答2

0

ベストアンサー

unpackした結果はtupleで返るので、その先頭(>iの結果)をとればよいです。

Python

1from struct import * 2 3data0 = bytearray(4) 4 5data0[0] = 0x10 6data0[1] = 0x12 7data0[2] = 0x22 8data0[3] = 0xff 9data1 = unpack('>i',data0) 10 11data1 = data1[0] 12data2 = 344 13data1 += data2 14print(data1) # 269624407

投稿2021/03/10 12:36

can110

総合スコア38341

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

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

0

取り出したい数値がひとつなら、struct.unpack()ではなく、int.from_bytes()のほうが簡単かもしれません。
https://docs.python.org/ja/3/library/stdtypes.html#int.from_bytes

python

1data0 = b'\x10\x12\x22\xff' 2data1 = int.from_bytes(data0, 'big') 3data2 = 344 4data1 += data2 5# 269624407

投稿2021/03/10 13:15

bsdfan

総合スコア4794

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問