は、ここに私のコード(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. 私は次の文字列を持っている文字列
- 3. テキストビューヘブライ語+ローマン文字を同じ文字列で扱っていない
- 4. Highcharts日に拾っていない - 文字列
- 5. JSONエンコードは、右のJSON文字列を配っていない
- 6. JOptionPaneが文字列を読み取っていない
- 7. Swift:文字列の文字が間違っています
- 8. $ me = $ facebook-> api( '/ me');戻って、空の文字列
- 9. Java戻り文字列オブジェクト
- 10. 私はこのような文字列を持っている
- 11. 私は、静的な文字列のリストを持っている
- 12. string.IsNullOrEmpty(文字列)がstring.IsNullOrEmpty(文字列) 『いくつかの無効な引数を持っている」
- 13. チェックは、文字列は、私は文字列のリストを持っている
- 14. SmartyのPHP私は、文字列を持っている文字列
- 15. 私はjQueryの中の文字列を持っている文字列
- 16. は、私は、この文字列を持っている文字列
- 17. 私はこの文字列が持っている別の文字列
- 18. Org.json.JSONException:文字列で終端されていない文字列1834
- 19. 文字列から文字列を引き出し、私は文字列を持っている
- 20. 建物のクラス名は、私はこのような文字列の配列を持っている文字列
- 21. Javascript特殊文字が間違って戻ってきます
- 22. LINQの戻り文字列配列
- 23. MySQLのソート文字列、日付などではない文字列として
- 24. 私は、この持っている文字列配列
- 25. Grails - 文字列を日付に変換してから文字列に戻す
- 26. python array.fromfile vs struct.unpack
- 27. Objective-C:ユニコード文字をデコードして文字列に戻すにはどうしたらいいですか?
- 28. 文字列が配列に分割されていない
- 29. 2つのJava文字列が同じでないと言っています
- 30. C#私はこのような文字列のリストを持っている文字列
'bytes'を' str'に変換したいのであれば、それは間違っています(tm)。 'struct'は密接にレイアウトされたバイナリ(!)データを扱うためのものです。 – delnan
それは私が扱っていることです。 MESHなどは、バイナリデータの中の単なるラベルです。 – Artfunkel