1
int main()
{
    ifstream infile;
    infile >> std::noskipws;
    size_t size = 0;
    infile.open("tworecords.dat", ios::binary);

    if(infile.is_open())
    {
        infile.seekg(0, ios::end);
        size = infile.tellg();
        infile.seekg(0, ios::beg);

        char *buffer = new char [size];
        infile.read(buffer, size);
        infile.close();

        for(int i=0; i <59; i++)
        {
            c1 = (*buffer);
            buffer++;
            cout << c1 << endl;
        }

        std::cout.write (buffer, size);
        cout << endl;
        delete[] buffer;
    }
    return 0;
}

ファイルからデータ値を読み込んでいますが、ASCII 形式で表示されます。値を 16 進値として表示するにはどうすればよいですか?

私の 2 番目の質問は、コードで行おうとしているように、一度に 1 つの値を読み取るように、char ポインターをインクリメントして 1 ずつ増やすにはどうすればよいかということです。

4

3 に答える 3

0

16進変換は別として、ループは次のようになるはずです(コメントを参照):

    for(int i=0; i <size; i++)  // <-- size, not 59
    {
        c1 = buffer[i];         // copy the i'th element of buffer.  If you increment
                                // buffer (as in your example), you can't delete
                                //  it later because you lost the initial address
        cout << c1 << endl;
    }

16 進数の形式に応じて、1 桁ずつ出力したい場合 (たとえば、「A」を 10 に変換するなど) の非常に基本的な方法は次のとおりです。

    int dec; 
    if (c1>='0' && c1<='9') {
       dec= c1 - '0';   // e..g for '0' (ascii 48) it will make dec= (int)0.
    }
    else 
    if (c1>='A' && c1<='F') {
       dec= 10 + (c1 - 'A');   // e..g for 'A' (ascii 65) it will make dec= (int)10.
    }
    else {
         // should not happen or handle lower chase characters too
    }

sscanf を使用する別の方法は次のとおりです。

// convert one hex digit from c1 into a corresponding decimal number
char hex[2];
int dec;
hex[0]= c1;
hex[1]= '\0';
sscanf(hex, "%1x", &dec);
于 2013-06-11T19:09:23.430 に答える
0
#include <iomanip>

for(int i=0; i <size; i++)  // <-- size, not 59
{
    c1 = buffer[i];         // copy the i'th element of buffer.  If you increment
                            // buffer (as in your example), you can't delete
                            //  it later because you lost the initial address
    cout << hex << c1 << dec << endl;
}
于 2013-06-11T19:13:58.133 に答える