二进制转换为十进制

Dreamz 2008-11-28 04:34:32
今天在做一个题,一个有3000个二进制数的文本文件,每行以数字串的方式存放一个二进制数,最后一行为-1表示文件结束,二进制数长度最大为64,题目是个竞赛题,要求程序的时限为3s,在网上搜到一个利用位操作来把二进制转换为十进制的函数,感觉很不错,只是文本里的一个40多位的二进制数就判断为超出范围了,10多位的二进制数能正常转换,没看出来程序错在哪里,还请大家指点:)

#include<iostream>
#include <string>
#include <fstream>
using namespace std;

int ConvertBinToDec(const char *pBin);

int main()
{
ifstream in("a.txt");
for (string s; getline(in,s); )
{
if (s == "-1")
return 0;
char* c = new char[s.size()];
for (int i=0; i < s.size(); i++)
{
c[i] = s.at(i);
}
ConvertBinToDec(c);
}

return 0;
}

int ConvertBinToDec(const char *pBin)
{
int res=0;
if (strlen(pBin) > 64)
{
cout << "Out of range" << endl;
return 0;
}
while (*pBin == '0' || *pBin == '1')
{
if(res)
res <<= 1;
res += (*pBin - '0');
*pBin++;
}
cout << res << endl;
}
...全文
102 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxweilw 2008-11-28
  • 打赏
  • 举报
回复
res不能设置成int类型,要设置能容纳64位的类型.
Dreamz 2008-11-28
  • 打赏
  • 举报
回复
OK了,定义为unsigned int就没问题了,谢谢^^
Dreamz 2008-11-28
  • 打赏
  • 举报
回复
用c_str()函数有些长的二进制数会转换成负数,有些不会...
hai040 2008-11-28
  • 打赏
  • 举报
回复
unsigned ConvertBinToDec(const char *pBin)
{
unsigned res=0;
Dreamz 2008-11-28
  • 打赏
  • 举报
回复
用c_str()函数的话长的二进制数就转换成负数了,应该全是正数才对吧...
hai040 2008-11-28
  • 打赏
  • 举报
回复
直接用ConvertBinToDec(s.c_str())
那个s转c没加结束符

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧