2016-04-01 35 views
0

8ビットの符号なし整数をファイルに書きたいと思っています。 C++では、私たちは形式がある、fprintfの使用してそれを行うことができます。Pythonを使って8ビットの符号なし整数をファイルに書き込む方法は?

% [フラグ] [幅] [。精度] [長さ]指定

を私のpythonを使用してそれを行うことができます方法はありますか? x = 1の値をasigningしてファイルのサイズを調べようとしましたが、9つの整数値しか表示されませんでしたが、ファイルサイズが35バイトであることはわかりませんでした。

f = open('myfile','w') 
while x>0: 
for i in range(0,9): 
    a[i] = random.randint(0,255) 
    f.write("%d" % a[i]) 
    f.write(" ") 
f.write('\n') 
x = x-1 
f.close() 

size of myfile

+1

あなたのコードでは、0から255の範囲の数字のテキスト10進表記が書かれています。あなたの文章は、非テキストバイナリ表現を書いてほしいことを示しています。違いを理解していますか?もしそうなら、あなたは実際に何をしたいですか? –

+0

なぜそうではありませんか? 0から255までのランダムな整数が得られます。テキストファイルに書き出すので、その数字の文字列表現を取得しています.'1 'は1文字/バイト、' 10 'は2 24文字/バイト(+ 10スペース+改行)になる数字が生成されたばかりです。 –

+0

いいえ、違いは分かりません: - (@Robᵩ –

答えて

2

次のコードは、1バイトあたりのワードバイナリ表現を使用して、9 8ビットの符号なし整数ファイルを書き込みます。このプログラムの

import struct 
import random 

f = open('myfile','wb') 
for i in range(0,9): 
    a = random.randint(0,255) 
    f.write(struct.pack("=B", a)) 
f.close() 

重要な機能は次のとおりです。

  • それは出力ファイルを開くには 'w'、モード'wb'ではなく使用しています。

  • struct.packを使用してバイナリデータを作成します。

+0

"このコード"では、 –

+0

@BarryTheHatchet - もっとわかりますか? –

+0

すごくいいですよね。 –

0

ファイルをバイナリモードで開き、符号なし整数値を1文字列に変換する必要があります。これを行う簡単な方法は次のとおりです。

import random 

with open('myfile', 'wb') as f: 
    for _ in range(0, 9): 
     a = random.randint(0, 255) 
     f.write(chr(a)) 
関連する問題