【问题标题】:c++ input hexadecimal without 0xc ++输入没有0x的十六进制
【发布时间】:2016-10-20 09:57:09
【问题描述】:

我正在制作一个通过放置偏移量(十六进制)来转储文件的项目。我必须像 0xBEE4DC 一样将十六进制与 0x 放在一起,因为如果我像 BEE4DC 那样放置没有 0x 的十六进制,应用程序将崩溃或返回错误。有没有办法在没有“0x”的情况下输入十六进制?

这是我的代码。我对这个项目保密,所以我不会显示比这更多的代码。

转储1.cpp

void LoadMetadata(char* szFile)
{
    string mystr;
    int offset2;
    int offset1;
    std::cout << "Input unknown offset #1: ";
    getline(cin, mystr);
    stringstream(mystr) >> offset1;
    std::cout << "Input unknown offset #2: ";
    getline(cin, mystr);
    stringstream(mystr) >> offset2;
    std::cout << "\n";

    ...

}

dump2.cpp

static int offset2;
static int offset1;

void LoadDumpLib(char* szFile)
{

...
    pCodeRegistration = (DumpCodeRegistration*)MapVATR(offset2, pLibIl2Cpp);
    pMetadataRegistration = (DumpMetadataRegistration*)MapVATR(offset1, pLibIl2Cpp);

...
}

【问题讨论】:

  • 您可以将您的十六进制数(开头没有“0x”)作为字符串读取,然后解析字符串(检查它是否有“0x”,然后在下一步操作之前添加“0x”如果需要)

标签: c++ hex hexdump


【解决方案1】:

这段代码应该可以工作

std::cout << "Input unknown offset #1: ";
getline(cin, mystr);
stringstream(mystr) >> hex >> offset1;
std::cout << "Input unknown offset #2: ";
getline(cin, mystr);
stringstream(mystr) >> hex >> offset2;
std::cout << "\n";

【讨论】:

    【解决方案2】:

    以下代码将数字保存为不带 0x 的十六进制并加载。

    string mystr;
    int offset1;
    std::cout << "Input unknown offset #1: ";
    getline(cin, mystr);
    stringstream ss( mystr);
    ss << std::hex;
    ss >> offset1;
    std::cout << offset1 << std::endl;
    
    std::string str2;
    stringstream s2;
    s2 << std::hex << 0x2123;
    s2.flush();
    s2 >> str2;
    std::cout << str2 << std::endl;
    

    【讨论】:

      【解决方案3】:

      在代码中,文字值需要 0x 前缀才能解释为十六进制。所以0x 不是可选的。

        unsigned x = 0xABC;
      

      读取值时,例如使用流,0x 不是必需的(实际上,如果你想要前缀,就需要编码来处理它)。因此,例如,使用std::istringstreamstd::string 中读取数据;

        std::string x("ABC");
        std::istringstream sx(x);
        unsigned v;
      
        sx >>  std::hex >> v;
      
        if (v == 0xABC) std::cout << "Equal\n";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-07
        • 1970-01-01
        • 2015-04-17
        • 2011-06-01
        • 2014-05-26
        • 1970-01-01
        • 1970-01-01
        • 2011-12-09
        相关资源
        最近更新 更多