我可以说服C ++中的operator >>同时读取十六进制值AND和十进制值吗? 以下程序演示了如何读取十六进制错误。 我想要相同的istringstream能够读取十六进制和十进制。

#include <iostream>
#include <sstream>

int main(int argc, char** argv)
{
    int result = 0;
    // std::istringstream is("5"); // this works
    std::istringstream is("0x5"); // this fails

    while ( is.good() ) {
        if ( is.peek() != EOF )
            is >> result;
        else
            break;
    }

    if ( is.fail() )
        std::cout << "failed to read string" << std::endl;
    else
        std::cout << "successfully read string" << std::endl;

    std::cout << "result: " << result << std::endl;
}

===============>>#1 票数:12

你需要告诉C ++你的基础是什么。

想要解析十六进制数? 将您的“是>>结果”行更改为:

is >> std::hex >> result;

将std :: dec表示十进制数,std :: oct表示八进制数。

===============>>#2 票数:10 已采纳

使用std::setbase(0)启用前缀相关的解析。 它将能够解析10 (十进制)为10十进制, 0x10 (十六进制)为十进制16和010 (八进制)为八进制。

#include <iomanip>
is >> std::setbase(0) >> result;

===============>>#3 票数:-2

0x是C / C ++特定的前缀。 十六进制数字只是十进制数字。 您需要检查这些字符是否存在,然后进行适当的解析。

  ask by mes5k translate from so

未解决问题?本站智能推荐:

1回复

将void *十六进制转换为十进制整数

您好,我需要您的帮助将void *(十六进制数字)转换为十进制数字。 我在代码中使用了sqlite3,回调函数给了我一个&data,其中包含行数。 问题是:我需要将&data(十六进制数字)保存为int。 也许有另一种方法可以执行此操作,但是我尝试将&data十六进制转换为十进制int,问
2回复

十六进制到十进制转换

我必须将十六进制转换为十进制值,然后将其乘以10,然后再转换回十进制。 我弄清楚了大部分问题,当我将其乘以10并将其转换回十六进制值时,就会发生问题。 我知道有一种更简单的方法,只需使用char数组即可完成。 我似乎无法弄清楚哪里出了问题。
2回复

C ++十进制转换为十六进制(int转换为char)

我正在尝试制作一个将int作为参数并返回char类型的十六进制的函数。 这是函数: 当我写[0] ,它返回十六进制版本,但仅返回第一个数字。 因此,如果十六进制值为14那么我只会得到1 。 没有这个[]规范,它是一个std::string ,但是我需要使用char形式的完整十六进制
2回复

二进制转换中的十六进制与十进制

例如,这是设置整数变量(例如C ++)的两种方法: 哪个语句将编译更快实际位设置为整数值? 编辑 :*编译从执行更改。 我假设到二进制的转换是在执行时,但考虑到@muntoo的回答,似乎是在编译时
1回复

十进制转换为十六进制-反转十六进制值

我需要用一个int调用byteSwap(),然后将其转换为十六进制并反转十六进制。 例如 byteSwap(2030)或7ee(十六进制)应返回ee7。 该程序还执行其他一些操作,我想使用reverse()在byteSwap()中进行反转。 我尝试在byteSwap()中使用几个不同的循
5回复

如何正确解释数字(十六进制,十进制,十进制)

我正在尝试编写一个程序,该程序接受-十六进制,八进制和十进制-的输入,将它们存储在整数变量中,并输出它们以及将其转换为十进制形式。 例如: 用户输入:0x43、0123、65 程序输出: 所以显然我需要一种解释数字的方法,但是我不确定如何去做。 我尝试了各种方法,例如将它
2回复

使用按位运算符将十进制转换为八进制

以下函数旨在将其参数(整数)从十进制转换为八进制。 它适用于任何正输入,但是,对于num = -1它返回77777777777 ,当它应返回37777777777 ,因此第一个数字需要为3而不是7 。 为什么会这样呢? 对于所有负输入,该功能似乎都不正确。 如何调整算法,使其对负数
1回复

十六进制值到自定义十进制值

我得到了需要通过特定规则转换的8位值。 规则是 值类型是无符号的 步骤是0.1(在文档中保留Res ,我不确定那是什么意思) 偏移量是-10(我也不太清楚) 值范围是[-10,+15.5](包括两者) 我的想法是将其表示为uint8_t ,如果numb
2回复

在编译时将十进制转换为十六进制

我正在尝试创建一个程序,该程序可以在编译时从十进制数转换为十六进制数。 不幸的是,我是元编程的新手,在编译时我找不到一种方法。 有什么想法可以解决这个问题吗? 如何在不违反模板元编程原理的情况下表示这样的数字。
2回复

cout打印十六进制而不是十进制

有没有人想到一个简单的std::cout可能会以十六进制格式打印一个值,而该值只能设置为十进制格式(如整数)? 例如,我有一行: std :: cout <<“ _Agent [” <<目标<<“]仍在” << ((target-&