C ++ 11:当前导字符为alpha(abcdef)时如何从字符串流解析十六进制字符串

问题描述 投票:3回答:1

基于https://en.cppreference.com/w/cpp/io/manip/hex的示例,我试图从std :: stringstream读取十六进制值。当字符串的前导字符是数字字符[0-9]时,一切正常,但是当前导字符是字母字符[af,AF]时,从流中获取值会占用这些字符,但不分配值到整数。是否有一个标志或需要设置的东西来告诉stringstream或std :: hex实际上这是一个有效的十六进制值,应该这样解释?

我可能最终会从流中读取字符串并使用std :: stoi,但想知道为什么直接从字符串流中解析不起作用,或者是否有办法使之起作用。

示例代码:

#include <iostream>
#include <sstream>
#include <string>
int main()
{
    int anint = 0;
    std::stringstream ss;
    ss.str("1234abcd");
    ss >> std::hex >> anint;
    printf("anint = %x\n", anint);

    anint = 0;
    ss.str("a234abcd");
    ss >> std::hex >> anint;
    printf("anint = %x\n", anint);

    return 0;
}

输出:

anint = 1234abcd
anint = 0
c++ c++11 hex stringstream
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.