1

バイナリファイルから16ビットをまたはとして読み取る必要がありstd::stringますchar *。たとえば、バイナリファイルにはが含まれていますが、それらをsまたは。89 ab cd efとして抽出できるようにしたいと思います。私は次のコードを試しました:std::stringchar *

ifstream *p = new ifstream();
char *buffer;  
p->seekg(address, ios::beg);  
buffer = new char[16];  
memset(buffer, 0, 16);  
p->read(buffer, 16);  

std::coutバッファにしようとすると、何も表示されませんでした。バイナリファイルでこれらの文字を読み取るにはどうすればよいですか?

編集:「0x89abcdef」などのint型のバッファーを探していました。達成することは可能ですか?

4

3 に答える 3

4

何かのようなもの:

#include <string>
#include <iostream>
#include <fstream>
#include <iomanip>

int main()
{
    if (ifstream input("filename"))
    {
        std::string s(2 /*bytes*/, '\0' /*initial content - irrelevant*/);
        if (input.read(&s[0], 2 /*bytes*/))
            std::cout << "SUCCESS: [0] " << std::hex << (int)s[0] << " [1] " << (int)s[1] << '\n';
        else
            std::cerr << "Couldn't read from file\n";
    }
    else
        std::cerr << "Couldn't open file\n";
}
于 2012-06-14T01:00:18.573 に答える
0

バイナリストリームをテキストのように読み取ることはできません。

もちろん、バイナリとして読み取ることもできます(ストリームオブジェクトで「file.read()」および「file.write()」メソッドを使用することにより)。あなたが今していることと同じように:)

バイナリをテキストに変換することもできます。「16進テキスト文字列に変換」と「uuencodebase64」は、これを行う2つの一般的な方法です。

于 2012-06-14T00:51:01.047 に答える
0

バイトを数値として読み取りたいと思うでしょう(おそらくlong long型の)。次に、次のようなフォーマット指定子を使用してそれらを印刷できます。

#include <iostream>
#include <iomanip>

int main()
{
    using namespace std;

    int x =   2;
    int y = 255;

    cout << showbase // show the 0x prefix
         << internal // fill between the prefix and the number
         << setfill('0'); // fill with 0s

    cout << hex << setw(4) << x << dec << " = " << setw(3) << x << endl;
    cout << hex << setw(4) << y << dec << " = " << setw(3) << y << endl;

    return 0;
}
于 2012-06-14T01:00:53.690 に答える