如何读取十六进制下一个字符

时间:2016-07-12 01:22:35

标签: c++

const

#include <iostream> #include <fstream> #include <iomainip> using namespace std; int main(int argc, char* argv[]) { ifstream inf(argv[1]); inf >> noskipws; cout << setbase(16); cout << setfill('0'); size_t fileOffset = 0; char ch; inf >> ch; while (!inf.eof()) { if ( fileOffset % 16 == 0 ) { cout << setw(4); if(fileOffset ! = 0) cout << endl; cout << fileOffset << " "; } cout << set(2); cout << (int)ch << " "; inf.peek(); inf >> ch; } cout << endl; inf.close(); return 0; } 是包含argv[1]的文本文件。 我们要将其转换为数字。

如果我现在就赶来,那就是......

abcdefghijklmnopqrstuvwXYZ

(我想在左侧只展示一次0000 61 0000 62 0000 63 0000 0000 69 0000 6a 0000 6b 0000

0000inf.peek();是我制作的代码。我觉得我是 就在inf >> ch。我应该想出一个移动到的代码 文件中的下一个字符。我应该如何替换它 inf >> ch打印出来像

inf.peek()

1 个答案:

答案 0 :(得分:0)

问题是你永远不会增加fileOffset,因此它总是0。当它0打印偏移而不先开始新行时,每个字符前面都有0000。只需在循环底部添加fileOffset++即可。

inf >> ch;

while (!inf.eof())
    {
        if ( fileOffset % 16 == 0 )
            { 
                cout << setw(4);
                if(fileOffset ! = 0) {
                    cout << endl;
                }
                cout << fileOffset << " ";
            }

        cout << setw(2);
        cout << (int)ch << " "; 

        fileOffset++;
        inf >> ch;
    }

也不需要inf.peek()。您cout << set(2);的拼写错误cout << setw(2);