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

tri*_*ker 0 c++

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

假设

cin.unsetf(ios::dec); cin.unsetf(ios::hex); and cin.unsetf(ios::oct);
Run Code Online (Sandbox Code Playgroud)

用户输入

0x43 0123 65
Run Code Online (Sandbox Code Playgroud)

它们存储为整数.现在假设程序想要将这些值识别为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";
}
Run Code Online (Sandbox Code Playgroud)

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

当然你可以输入数字作为字符串并测试那种方式,但是然后存在将字符串作为int读回的问题.

例如:

       string a = 0x43;
       int num = atoi(a.c_str());
       cout << num; // will output 43
Run Code Online (Sandbox Code Playgroud)

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

小智 5

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