用bitset进行2进制输入输出

  C/C++内置的输入、输出,对整数进制只支持三种:8进制、10进制、16进制。记得很久以前,有好几次想用到2进制的输入输出,最终只好自已转换。
  昨天kaikai突然发了一个POST:
kaikai:
看看能不能把这个程序改得更短
?

#include 
<cstdio>
int main()
{
    
char*a,b[33];
    scanf(
"%*d");
    
while(scanf("%s",b)==1)
    
{    
        
int d=0;
        
for(a=b;*a;)d=d*2|*a++%2;
        printf(
"%d.%d.%d.%d\n",d>>24&255,d>>16&255,d>>8&255,d&255);
    }

    
return 0;
}

 
一眼看过去,呵呵,输入输出不可省,核心还是二进制的转换问题。于是想起以前曾经做过的事情,学习多了,直觉的可以用bitset来实现。打开MSDN,查找bitset,嘿,果然有定义流输入操作符。
  写了一个测试:
#include <iostream>
#include 
<bitset>
using namespace std;

void main()
{
    bitset
<32> a;
    cin 
>> a;
    cout 
<< a.to_ulong() << endl;    
}
呵呵,搞定了,输入2进制,输出10进制,完全正常。以后输入2进制串的时候,就不需要自已转换了。
 
补充:
  经过wang.lj 网友的提醒,才发现C库中还有一个函数,就是用来将数字串以指定的数制转换成整数的:
        i = strtol(s, &end, 2); //二进制流转换为16进制字符串
posted @ 2006-06-29 10:11 沐枫 阅读(2456) 评论(6)  编辑 收藏 网摘 所属分类: C++

  回复  引用    
#1楼 2006-06-29 20:09 | LOGOS [未注册用户]
汗。。。之前用bitset做的是别的操作,已经体验到简便。
没想到还有这么用的。。。

  回复  引用    
#2楼 2006-06-29 20:18 | Jerry Cat [未注册用户]
"一眼看过去" scanf("%*d"); 将俺楞了一下, 久疏控制台界面(在GUI上浸淫日久), 查了下MSDN才搞清:) 呵呵!
  回复  引用  查看    
#3楼 2006-06-30 11:22 | .Live      
STL... 得多学习
[r]

  回复  引用  查看    
#4楼 2006-06-30 13:39 | kaikai      
确实清楚多了~
  回复  引用    
#5楼 2006-07-01 12:30 | wang.lj [未注册用户]
标准库函数strtol就可以实现字符串转二进制
i = strtol(s, &end, 2); //二进制流转换为16进制字符串

  回复  引用  查看    
#6楼 [楼主]2006-07-01 23:19 | 沐枫      
@wang.lj
嗯,谢谢,又一个了。
看来我还是对标准库不熟啊。:(


发表评论



姓名 [登录] [注册] 
主页
Email (仅博主可见) 
验证码 *  验证码看不清,换一张
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论   新用户注册   返回页首      

导航: 网站首页 社区 新闻 博问 闪存 网摘 招聘 .NET频道 知识库 找找看 Google站内搜索



China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
China-Pub 计算机绝版图书按需印刷服务

相关文章:

相关链接: