1

ファイルをRAMに単一の数値として読み込み、基本的な数学演算とビットシフトを実行する必要がある圧縮プログラムに取り組んでいます。GNU から gmp を見てきましたが、c/c++ への統合が非常に貧弱であるため、どこから値を読み込んで mpz_t 変数に入れればよいかわかりません。

4

1 に答える 1

1
#include <fstream>
#include <gmp.h>
#include <gmpxx.h>
#include <iostream>

using namespace std;

mpz_class fileToNumber (const string& fileName)
{
    mpz_class number;
    ifstream file(fileName.c_str());
    while( file.good() ){
        unsigned char c;
        file >> c;
        number <<= 8;
        number += c;
    }
    file.close();
    return number;
}


int main (int argc, char* argv[])
{
    if( argc - 1 < 1 ){
        cout << "Usage: " << argv[0] << " file.txt" << endl;
        return 0;
    }
    cout << hex << fileToNumber(argv[1]) << endl;
}

編集:元の質問を修正し、誤解しました。ファイルを ASCII 番号ではなく番号として読み取るようになりました。

編集: ファイル全体を mpz_class への変換をナイス関数に移動しました。

于 2011-07-03T03:56:51.373 に答える