4

Pythonの「単語」のバイト数を知る必要があります。これが必要な理由は、ファイルから読み取る必要のある単語の数があるからです。単語のバイト数がわかれば、このfile.read(num_bytes)関数を使ってファイルから適切な量を読み取ることができます。

ワードのバイト数を確認するにはどうすればよいですか?

4

6 に答える 6

7

platform.architecture次の機能を使用できます。

>>> import platform
>>> platform.architecture()
('64bit', '')

同じページのメモに注意してください。

MacOSX(およびおそらく他のプラットフォーム)では、実行可能ファイルは複数のアーキテクチャを含むユニバーサルファイルである場合があります。現在のインタープリターの「64ビットネス」を取得するには、sys.maxsize属性を照会する方が信頼性が高くなります。

is_64bits = sys.maxsize > 2**32

これにより、Pythonインタープリターがコンパイルされたワードサイズが得られることに注意してください。Pythonが32ビットモードでコンパイルされている場合、64ビットホストで32の値を取得できます。

ファイルが別の実行可能ファイルによって生成され、この実行可能ファイルにアクセスできる場合は、platform.architecture関数の最初のオプションの引数を使用できます。

>>> p.architecture('/path/to/executable')
('32bit', '')
于 2011-08-02T20:40:22.333 に答える
1

Pythonには「word」の概念はありません。ファイルからバイナリデータを読み取るときに、一度に読み取る必要のあるバイト数を明示的に指定できます。

コンパイラやプラットフォームの観点から、「WORD」は通常、基本データユニットのサイズを決定します。そしてPythonはそのようなものから独立しています:)

于 2011-08-02T20:44:02.983 に答える
0

単語が何であるかについての本当に正しい定義はありません。特定のアーキテクチャがいくつかのバイト数の「ワード」を呼び出すことを除いて(x86は1ワードを2バイトと呼び、PPCは1ワードを4バイトと呼びます)、この任意の値以外にあまり意味はありません。

おそらく最も簡単な解決策は、structモジュールに従うことです。たとえば、フォーマット'h'は短い署名を意味します(これは「単語」のインテルの定義と合理的に一致します)。だからあなたはこれを行うことができます:

>>> import struct
>>> f = file('.vimrc')
>>> struct.unpack('h', f.read(struct.calcsize('h')))
(8226,)
>>> 
于 2011-08-02T20:45:21.237 に答える
0

Pythonの「単語」のバイト数を知る必要があります。これが必要な理由は、ファイルから読み取る必要のある単語の数があるからです。

次に、ファイルを書いた人に尋ねる必要があります。Pythonとは何の関係もなく、実際のファイル形式とは何の関係もありません。ところで、ファイルが単語のシーケンスとして定義されるのはかなり奇妙です。これはおそらく16ビットまたは32ビットの整数のシーケンスであるか、実際にはテキストの意味での単語です。この場合、区切り文字が何であれ、実際にファイルをスキャンしてトークンを探します。

于 2011-08-03T00:03:14.563 に答える
0

このようなものはどうですか:

def machine_word_size():
    import sys
    num_bytes = 0
    maxint = sys.maxint
    while maxint > 0:
        maxint = maxint >> 8
        num_bytes += 1
    return num_bytes
于 2013-04-17T06:58:07.127 に答える
0

おそらく、次のことが適切で役立つ可能性があります。32ビットをチェックするとします。(-1)<<31が長く戻ってくるかどうかを確認します。32ビットの場合はそうではありませんが、(-1)<<32および1<<31はそうです。

于 2017-05-21T22:51:06.857 に答える