使用C ++输入十六进制和读取十六进制

时间:2011-09-30 03:20:16

标签: c++ input hex

我正在尝试读取和写入十六进制但我输入十六进制并读取十六进制作为十六进制而不是ascii时遇到了问题。什么让我打印地址,正确的价值我不太确定我做得对。关于我做错了什么的暗示?好吧它到目前为止工作只是为了修复读取打印实际地址而不是输入地址+1。

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
using namespace std;

int main(int argc,char ** argv) {
    if(argc <= 1) {
        cout<<"Enter a file name please";
        exit(0);
    } else {
       fstream in;
       in.open(argv[1],fstream::in | fstream::out | fstream::binary);
       string input;
       unsigned int v;
       unsigned int print;
       unsigned int g;
       int iter;
         for(iter = 0; input!="save";){
            cout<<"Hex Edit("<<argv[1]<<"): ";
            cin>>input;
            if(input == "read"){
               cout<<"Enter Offset: ";
               cin>>hex>>v;
               in.seekg(v);
               print=in.get();
               g=in.tellg();
               cout<<"Value at offset("<<hex<<g<<"): "<<hex<<print;
               cout<<endl;
           }
           if(input == "write"){
              cout<<"Enter Offset: ";
              cin>>hex>>v;
              in.seekp(v);
              cout<<"Enter Value: ";
              cin>>hex>>v;
              in.put(v);
            }
            } else if(input == "save") {
                in.close();
            }
            cout<<endl;
        }
    }
    return 0;
}

1 个答案:

答案 0 :(得分:2)

你似乎打算一次读写一个字符 - cin和cout都能够处理积分值,这在这里是理想的。请记住,十六进制字符串确实代表数字! Streams能够解释它们。只需将变量v和print更改为int类型,就可以一次读入整个十六进制值。

举个例子:

int value;
cin >> hex >> value;
cout << hex << value;