2017-01-21 13 views
0

現在開発中のパッケージにバグを修正しようとしています。問題がエラーを投げているstruct.pack機能のようだ:私はSOページに答える他に、このエラーのために提供さ答えを使用しようとしました構造体 - 's'の引数はバイトオブジェクトである必要がありますが、すでにバイトオブジェクトです

struct.error: argument for 's' must be a bytes object 

が、仕事に何かを得るように見えることはできません、エラーは継続します。以下は

は、私は、エラーを複製パッケージで出力として扱ってきた入力の簡易版である:

import struct 

second_arg = b'LASF_Projection\x00' 

print(type(second_arg)) 
struct.pack("<ssssssssssssssss", *second_arg) 

これは出力になり:

<class 'bytes'> 
Traceback (most recent call last): 
    File "C:/pyfor/anothersandbox.py", line 7, in <module> 
    struct.pack(b"<ssssssssssssssss", *second_arg) 
struct.error: argument for 's' must be a bytes object 

私の疑いがあります解凍時に、* second_argはもはやバイト形式でなく、エラーをスローしています。この疑惑は正しいのでしょうか?そうであれば、second_argのアンパックされた部分をオンザフライでバイト形式に変換することは可能ですか?

+1

'bytes'をアンパックすると、' int'が得られます。これは 'bytes'を繰り返したときと同じです。 – ShadowRanger

+0

このデータにはどのような結果が期待されますか? 'pack(" <16s "、second_arg)'はどうでしょうか?同じ 'b'LASF_Projection \ x00 'を与えます – furas

答えて

0

あなたの疑惑は正しいです。バイトは、範囲(256)内のintのシーケンスです。 In 3.6:

>>> [*b'LASF_Projection\x00'] 
[76, 65, 83, 70, 95, 80, 114, 111, 106, 101, 99, 116, 105, 111, 110, 0] 

これらのintは、あなたが渡しているものです。

関連する問題