【发布时间】:2013-12-26 07:09:53
【问题描述】:
我正在尝试将二进制值转换为十六进制值,我得到了以下代码,它在 28 位上运行良好,但在 32 位上运行良好。
代码如下。
int main()
{
long int longint=0;
string buf;
cin>>buf;
int len=buf.size();
for(int i=0;i<len;i++)
{
longint+=( buf[len-i-1]-48) * pow((double)2,i);
}
cout<<setbase(16);
cout<<longint;
return 0;
}
如果我输入 28 '1' (111111111111111111111111) 那么输出是 fffffff 但如果我输入 32 '1' (11111111111111111111111111111111) 则输出为 80000000。
谁能解释为什么会发生这种情况以及在上面的代码中为什么减去 48。
【问题讨论】:
-
这是什么
48?你假设ASCII?使用'0'可能会更好。 -
您使用哪个版本的编译器。尝试找出 long 它的大小,如果是 32 位,则第一位是符号位。也尝试使用 unsigned long int 作为 longint
-
unsigned long int 成功了 .. 谢谢 ..:).. 但它以小写字母 'af' 的形式出现,而应该是大写字母 'AF'。
-
在输出数字之前使用 std::cout