| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1702 人关注过本帖
标题:[讨论]二进制和十进制的转换
只看楼主 加入收藏
helin324
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-3-13
收藏
 问题点数:0 回复次数:8 
[讨论]二进制和十进制的转换
各位好~ 本人学C++不长时间,在做钱能版《C++程序设计教程》第四章 后面的习题时。有一个题目不晓得怎么动手了。就是最后那个二进制和十进制的转换问题。
举例:一个TXT文本上有这样一些二进制数:
101000000000000000011010101 (最长64位)
101000000000101000000000010
000000000000001111110011001
-1(遇到-1时候输出)
输出: XXX
XXX
XXX
这个怎么做哦!我也不知道怎么能描述得更清楚点。反正你们看着办 帮帮我吧,有详细程序更好。呵呵~~~~~谢谢了 呵呵!

一个C++爱好者
搜索更多相关主题的帖子: 二进制 十进制 XXX 
2007-03-27 19:59
helin324
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-3-13
收藏
得分:0 

很不厚道的自己帮自己顶

希望高手来指点一二

2007-03-27 21:27
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
确实没有描述清楚!

Fight  to win  or  die...
2007-03-27 21:34
helin324
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-3-13
收藏
得分:0 
我再描述一下吧。不好意思了~
假如一个名字为“AAA。TXT”的文本,里面有3000行二进制数字。数字是不超过64位的。
用一个程序把“AAA。TXT”文本里的二进制数转换成十进制数字。遇到-1停止。再把结果存到“BBB。TXT”文本里~
这样清楚些了吗?不好意思
2007-03-27 21:40
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

string BinaryToHex(string BinaryStr)
{
string HexStr="0x";
int num=0;
int len=BinaryStr.length();
int start=0;
int end=len%4?len%4-1:3;
do
{
for(int i=start;i<=end;i++)
{
num+=(BinaryStr[start+end-i]-'0')*pow(2,i-start);
}
char buf[2];
itoa(num,buf,16);
HexStr+=buf;
num=0;
start=end+1;
end=start+3;
}while(start<len);
return HexStr;
}
void main()
{
ifstream ins("AAA.txt");
if(!ins)exit(1);
ofstream ous("BBB.txt");
if(!ous){
ins.close();
exit(1);
}
while(!ins.eof())
{
string str;
ins.getline(str,100);
if(str=="-1")break;
str=BinaryToHex(str);
ous<<str;
ous.put('\n');
}
ins.close();
ous.close();
}

[此贴子已经被作者于2007-3-28 13:52:36编辑过]


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2007-03-28 13:45
dragonfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1024
专家分:0
注 册:2006-3-20
收藏
得分:0 
以下是引用helin324在2007-3-27 21:40:07的发言:
我再描述一下吧。不好意思了~
假如一个名字为“AAA。TXT”的文本,里面有3000行二进制数字。数字是不超过64位的
用一个程序把“AAA。TXT”文本里的二进制数转换成十进制数字。遇到-1停止。再把结果存到“BBB。TXT”文本里~
这样清楚些了吗?不好意思

你指的什么?


2007-03-28 13:45
helin324
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-3-13
收藏
得分:0 

真是谢谢wfpb了,
不过你的我有好几个地方不很明白,等会我自己琢磨琢磨吧~
你的思路是这样的吗?
比如:00010001 这样一个二进制,换成十进制就是(2^0*1+2^1*0+2^2*0......)是这样子吗?
我下午自己这样子编了一下。结果一看,N多行数据出来了~~乱七八糟的


int end=len%4?len%4-1:3; 这个是干什么用的?
希望你还能再来看这个帖子~详细说一下好吗~~恕我愚昧~~~

2007-03-28 17:16
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

不要这样说.

先用一个string存储2进制数,然后得到长度len,判断他是不是4的倍数,如果是那么从0到3是第一个(2进制数转16进制数,因为2^4==16,所以是4位对应1位).如果不是(比如是11,那么11%4==3)所以第一个是3位数转换为16位(0到len%4-1),后面就是对齐后的了,都用4个2进制转换为1个16进制.


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2007-03-29 09:04
RL720
Rank: 1
等 级:新手上路
帖 子:148
专家分:0
注 册:2005-11-6
收藏
得分:0 
就是10进制转2进制么?用itoa好了。。。
例子是MSDN上的

Example

/* ITOA.C: This program converts integers of various
* sizes to strings in various radixes.
*/

#include <stdlib.h>
#include <stdio.h>

void main( void )
{
char buffer[20];
int i = 3445;
long l = -344115L;
unsigned long ul = 1234567890UL;

_itoa( i, buffer, 10 );
printf( \"String of integer %d (radix 10): %s\n\", i, buffer );
_itoa( i, buffer, 16 );
printf( \"String of integer %d (radix 16): 0x%s\n\", i, buffer );
_itoa( i, buffer, 2 );
printf( \"String of integer %d (radix 2): %s\n\", i, buffer );

_ltoa( l, buffer, 16 );
printf( \"String of long int %ld (radix 16): 0x%s\n\", l,
buffer );

_ultoa( ul, buffer, 16 );
printf( \"String of unsigned long %lu (radix 16): 0x%s\n\", ul,
buffer );
}

Output

String of integer 3445 (radix 10): 3445
String of integer 3445 (radix 16): 0xd75
String of integer 3445 (radix 2): 110101110101
String of long int -344115 (radix 16): 0xfffabfcd
String of unsigned long 1234567890 (radix 16): 0x499602d2



2007-03-30 16:17
快速回复:[讨论]二进制和十进制的转换
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021963 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved