用bitset进行2进制输入输出

  C/C++内置的输入、输出,对整数进制只支持三种:8进制、10进制、16进制。记得很久以前,有好几次想用到2进制的输入输出,最终只好自已转换。
  昨天 kaikai突然发了一个POST:
None.gif kaikai:
None.gif看看能不能把这个程序改得更短
?
None.gif
None.gif#include 
< cstdio >
None.gif
int  main()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
char*a,b[33];
InBlock.gif    scanf(
"%*d");
InBlock.gif    
while(scanf("%s",b)==1)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{    
InBlock.gif        
int d=0;
InBlock.gif        
for(a=b;*a;)d=d*2|*a++%2;
InBlock.gif        printf(
"%d.%d.%d.%d\n",d>>24&255,d>>16&255,d>>8&255,d&255);
ExpandedSubBlockEnd.gif    }

InBlock.gif    
return 0;
ExpandedBlockEnd.gif}

None.gif 
一眼看过去,呵呵,输入输出不可省,核心还是二进制的转换问题。于是想起以前曾经做过的事情,学习多了,直觉的可以用bitset来实现。打开MSDN,查找bitset,嘿,果然有定义流输入操作符。
  写了一个测试:
None.gif #include  < iostream >
None.gif#include 
< bitset >
None.gif
using   namespace  std;
None.gif
None.gif
void  main()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    bitset
<32> a;
InBlock.gif    cin 
>> a;
InBlock.gif    cout 
<< a.to_ulong() << endl;    
ExpandedBlockEnd.gif}
None.gif
呵呵,搞定了,输入2进制,输出10进制,完全正常。以后输入2进制串的时候,就不需要自已转换了。
 
补充:
  经过wang.lj 网友的提醒,才发现C库中还有一个函数,就是用来将数字串以指定的数制转换成整数的:
        i = strtol(s, &end, 2); //二进制流转换为16进制字符串
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值