私が入っているクラスでは、単純なmipsシミュレータに割り当てられています。私のプログラムが処理するはずの命令はバイナリファイルで与えられます。私はそのファイルから何かを使用する方法を知りません。ここに私のコードです:ファイルからバイナリデータをバイナリデータをバイナリ形式の2つのバイナリをPythonでどのように変換できますか?
import struct
import argparse
'''open a parser to get command line arguments '''
parser = argparse.ArgumentParser(description='Mips instruction simulator')
'''add two required arguments for the input file and the output file'''
parser.add_argument('-i', action="store", dest='infile_name', help="-i INPUT_FILE", required=True)
parser.add_argument('-o', action="store", dest='outfile_name', help="-o OUTPUT_FILE_NAME", required=True)
'''get the passed arguments'''
args = parser.parse_args()
class Disassembler:
'''Disassembler for mips code'''
instruction_buffer = None
instructions_read = 0
def __init__(self, filename):
bin_file = None
try:
bin_file = open(filename, 'rb')
except:
print("Input file: ", filename, " could not be opened. Check the name, permissions, or path")
quit()
while True:
read_bytes = bin_file.read(4)
if (read_bytes == b''):
break
int_var = struct.unpack('>I', read_bytes)
print(int_var)
bin_file.close()
disembler = Disassembler(args.infile_name)
私は4バイトを印刷しました。返されたものを見ました。 私は普通のビット(1と0だけ)を見ることを望んでいました。私が得たものは、私が読んだものからバイトストリングでした。だから、私はこれについて何ができるのかを知ろうと試みた。だから私は整数にこれらのバイト文字列を変換するために構造体を使用できることがわかった。それは(4294967295、)のような形式でそれらを出力します。
私はそれを使用可能な整数にするためにトリムしなければならないので、これはまだ厄介です。それでもそれをビット(ベース2)に変換する必要があります。入力ファイルの入力の半分が符号付き32ビット数であるため、構造体を使用してバイトを符号付きまたは符号なしとして読み取ることができます。
これはすべてバイナリファイルからビットを取得するよりも複雑なようです。これを行う簡単な方法はありますか?また、秘密のpythonコードに信じられないほど精通しておらず、バイナリデータを初めて使う人のように説明できますか?
私の全体的な目標は、読んだ4バイトのうち32ビットを真っ直ぐにすることです。ファイルの先頭はmipsオペコードのリストです。だから私は、これらの数字の特定の部分を見ることができるようにする必要があります、最初の5ビットのように、次の6、など。ファイルの最後には32ビットの符号付き整数値が含まれています。ファイルの2つの半分はブレークオペコードで区切られています。
私に教えていただきありがとうございます。それは私が捜索を通してどんなまっすぐな答えも見つけることができないことを私に夢中にさせている。バイナリファイルを見たい場合は、どこに、私はそれを投稿しますか教えてください。
値のビットを[視覚化]したいだけですか(https://stackoverflow.com/questions/18111488/convert-integer-to-binary-in-python-and-compare-the-bits)またはそれらを[整数](https:// stackoverflow。com/questions/30971079/i-convert-an-to-a-bit-in-python)のフォームを使用してさらに操作できますか? – Reti43
私は思ったようにそれらを読む必要があります。私はそれぞれの32ビット値の中から特定の長さが必要だからです。私は最初の6ビットが何か、次に次の5ビットなどを見なければならないように、私は考えるストレートビットの値が必要です。それについてもっと良い方法があるのではなく、私の知る限りでは、これが私がデータを扱う方法を知っている唯一の方法です。 – Jacob
これを行うにはいくつかの方法があります。私のコメントの上のリンクを見てください。あなたの目標が何であるかを正確に質問することをお勧めします。そうでなければ、あなたが問題に取り入れようとしている解決策をより良い方法で提案することはできません。 – Reti43