は、ここに私のコード(py3.1)です。なぜ私は文字列を取得していないのですか?struct.unpack戻っていない文字列
答えて
。あなたが見せてくれたことは誤りでした。また、人々が推測する必要がないように、コードスニペットにすべての情報が含まれていることを確認してください。
>>> chars = "MESH" # guess
>>> binchars = b"MESH" # guess
>>> struct_fmt = "{}s".format(chars) # what you showed
>>> struct_fmt
'MESHs' ############### won't work
>>> import struct
>>> struct.unpack(struct_fmt, binchars)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
struct.error: bad char in struct format ############ didn't work
>>> struct_fmt2 = "{}s".format(len(chars)) # what you probably did use
>>> struct_fmt2
'4s' #### looks much better
>>> struct.unpack(struct_fmt2, binchars)
(b'MESH',) ### did work
>>>
マニュアル「は、結果として得られるバイトオブジェクトをアンパックについては...」と言うよう
私は投稿しました私のコードとそれは動作します、ありがとう。 'chars'は、あなたが"推測 "している文字列そのものではなく、望む文字列の文字数です。 (それはあなたが質問に答えたように見えるので、私はあなたを許します。) – Artfunkel
charsは整数の適切な名前ではありません、フォーマット( '{}')はまったく手がかりを与えませんでした。誰かがあなたがしていたことを再現できるように、全コード( 'self.get_bin(chars)' ???)を表示していませんでした。実際に、あなたが意図したことを実証するために必要なのは、 'struct.unpack(" 4s "、" b "MESH") ' –
これは動作します:
return struct.unpack("{}s".format(chars),self.get_bin(chars))[0].decode('ASCII')
をしかしunpack()
はこの自体を行うことを怠った理由を説明しません。答えが出るまで質問を開いたままにしておきます。
編集:ジェイソンの改善:
return self.get_bin(chars).decode('ASCII')
が本当に構造体の嘲笑を作ります...あなたはコードはあなたが実行しなかったものを実際にあることを確認している場合質問をするときに役立ちます
私は混乱しています...なぜあなたは 'struct'が文字列をデコードすると思いますか?そして、たとえ 'struct'がこれを行うと予想されても、' struct.unpack'は文字列がASCIIかUTF8か他のタイプのユニコードかどうかを自動的に推測できますか? –
'10s> char [10]'と '10w> wchar_t [10]'?私は実際に方法があると仮定しています、それは*文字列を行うことを主張します。 – Artfunkel
"うまくいく":もちろん、それだけであれば 'struct'は必要ありません...' 'struct'は" <4s2H2Bd "のようなフォーマットを必要とする構造体のためです –
アンパックタプル、この場合、長さ1のタプルを返します。
は、あなたが持っているものの最後に[0]
を追加し、それはあなたが期待するもの与える必要があります。
- 1. コードが関数から文字列を戻していない
- 2. Python struct.unpack - バイナリ文字列リテラルをアスキーテキストファイルに変換する
- 3. は、私はログインして戻り、次のことを文字列を、持っている文字列
- 4. '/'文字が角度2のクエリ文字列を通って来ていない
- 5. 私は次の文字列を持っている文字列
- 6. は、私は、文字列を持っているPython文字列
- 7. 等しい文字列がtrueに戻らない
- 8. python:開いている文字列(example.txt)が文字列を読み取っていない場合
- 9. テキストビューヘブライ語+ローマン文字を同じ文字列で扱っていない
- 10. バウンド文字列リストを表示していない文字列
- 11. 文字列の一部が別の文字列に入っていないか確認してください。
- 12. 活字体ジェネリックは適切な型に戻っていない
- 13. Highcharts日に拾っていない - 文字列
- 14. JSONエンコードは、右のJSON文字列を配っていない
- 15. JOptionPaneが文字列を読み取っていない
- 16. 文字列が右のtxtファイルに入っていない[discord.py]
- 17. ジャワ、句読点記号、プロセス文字列によって分割文字列は、私はこのような文字列を持っている文字列
- 18. 文字列でない文字列に
- 19. Swift:文字列の文字が間違っています
- 20. $ me = $ facebook-> api( '/ me');戻って、空の文字列
- 21. Elixir - 文字列を分割して、空の文字列をリストに戻さないようにしますか?
- 22. Goは大文字小文字を区別しない文字列contains()関数を持っていますか?
- 23. JavaScriptが私はこのような文字列を持っている文字
- 24. は、私はこの文字列を持っている奇妙な文字で文字列の結果に
- 25. 文字列のプレースホルダがサポートされていないフォーマット文字
- 26. 戻り行番号cellは文字列に似ています
- 27. 戻りパスを文字列として
- 28. Java戻り文字列オブジェクト
- 29. 文字列が2文字に満たない文字列
- 30. 私はこのような文字列を持っている
'bytes'を' str'に変換したいのであれば、それは間違っています(tm)。 'struct'は密接にレイアウトされたバイナリ(!)データを扱うためのものです。 – delnan
それは私が扱っていることです。 MESHなどは、バイナリデータの中の単なるラベルです。 – Artfunkel