整数存储 - 十六进制/八进制

时间:2009-07-28 17:52:06

标签: c++

我理解整数以二进制表示法存储,但我想知道这会如何影响它们的读取 - 例如:

假设

cin.unsetf(ios::dec); cin.unsetf(ios::hex); and cin.unsetf(ios::oct);

用户输入

0x43 0123 65

以整数形式存储。现在假设程序想要将这些值识别为hex,oct或dec,并执行类似的操作。

void number_sys(int num, string& s)
{
string number;
stringstream out;
out << num;
number = out.str();
if(number[0] == '0' && (number[1] != 'x' && number[1] != 'X')) s = "octal";
else if(number[0] == '0' && (number[1] == 'x' || number[1] == 'X')) s = "hexadecimal";
else s = "decimal";
}

该函数将所有整数读取为十进制。我在字符串转换后输入一些测试代码来输出字​​符串,字符串是十进制形式的数字。我想知道整数是否有办法保持基本符号。

当然,您可以将数字作为字符串输入并以此方式进行测试,但是然后存在将字符串作为int读取的问题。

例如:

       string a = 0x43;
       int num = atoi(a.c_str());
       cout << num; // will output 43

似乎保持/转换基本符号可能会变得非常棘手。作为一个附加问题,hex,dec和oct操纵器甚至不会帮助解决上面显示的问题,因为整数存储完全错误,甚至不能转换为小数。

1 个答案:

答案 0 :(得分:5)

整数(和所有其他数据)不使用“二进制表示法”存储,它们存储为二进制数。不,整数没有办法保留他们的输入格式(这正是你实际要问的)。