2016-09-07 4 views
1

私はpythonでファイルに1バイトだけ書き込むよう試みました。Pythonのバイナリファイルに1バイトを書き込むにはどうすればいいですか?

i=10 
fh.write(six.int2byte(i)) 

意志出力 '0x00のは0x0A'

fh.write(struct.pack('i', i)) 

意志出力 '0x00のは0x0A 0x00を0x00に'

これはやることが困難である理由私は理解できません。

+2

'fh'をどのように開いたのですか? – RemcoGerlich

+0

あなたは[ファイルオブジェクト](https://docs.python.org/3/glossary.html#term-file-object)、[ファイル記述子](https://docs.python.org/ 3/library/os.html#file-descriptor-operations)または実際の[Windowsのファイルハンドル](https://msdn.microsoft.com/en-us/library/windows/desktop/aa364225(v=vs.85) ).aspx)? Python2.7で – janbrohl

答えて

5

あなたはただ、その値でbytesオブジェクトを構築することができます:これはのみのpython3で動作

with open('my_file', 'wb') as f: 
    f.write(bytes([10])) 

bytesbytearrayに置き換えると、python2と3の両方で動作します。

また、バイナリモードでファイルを開いて、ファイルに書き込むことを忘れないでください。

+0

が生成されます。これは、0x31 0x5b 0x3d 0x30を生成します。 bytearrayを生成すると0x00 0x0a – reza

+0

が返されます。私はhexdump -xを使って余分な0x00を埋め込んでいたファイルを見ていました。 bytearrayは動作します。 – reza

+0

バイト/ bytearrayは0から255までの値をとる(符号なし) - 負の数に入れないでください – janbrohl

0

struct.pack("=b",i)(符号付き)とstruct.pack("=B",i)(符号なし)は、docs for structに表示される1バイトの整数をパックします。 ("="は標準サイズとアライメントを無視するためのものです)

import struct 
i=10 
with open('binfile', 'wb') as f: 
    f.write(struct.pack("=B",i)) 
+1

なぜダウンボートしましたか? – janbrohl

+0

これはまた、0x00 0x0aを生成します(= bまたは= Bオプションを萎縮させます) – reza

関連する問題