字符串转换为数字值的函数

wade_2003 2013-01-21 09:45:16
这是 《C primer plus+》 第15章 编程练习题。

编写一个将二进制字符串转化为数字值的函数,也就是说如果有以下语句:
char * pbin = “01001001”;
那么您可以将pbin 作为一个参数传送给该函数,使函数返回一个int值 25.

我没明白,字符串转换后怎么算得的int值为25?我觉得应该是71.
...全文
160 点赞 收藏 13
写回复
13 条回复
Joseph_ 2013年01月21日
引用 10 楼 GIS_wudi 的回复:
那是你的程序写错了 int r = 0; while(*p) { r = (r << 1 ) + *p++ - '0'; }
顶! 不错.
回复 点赞
wade_2003 2013年01月21日

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

int invert(const char *,int );
int main(void)
{
	int zhi,number;
	char *pstr ="010111010";
	number = strlen(pstr);
	zhi = strtol(pstr, NULL, 2);
	printf("%d",invert(pstr,number));

	return 0;
} 
int invert(const char *str,int n)
{
	int num;
	int i,sum =0;
	for(i=n-1;i>=0;i--)
	{
		if(*(str+i)=='1')
		  sum += 1 * pow(2,(n-1-i));
         else
           sum += 0 *pow(2,(n-1-i));
	}
	return sum;
}
我这样写,虽然能实现,但是有没有好的方法啊?
回复 点赞
GIS_wudi 2013年01月21日
while{*p) -> while(*p != '\0')
回复 点赞
GIS_wudi 2013年01月21日
那是你的程序写错了 int r = 0; while{*p) { r = (r << 1 ) + *p++ - '0'; }
回复 点赞
漫步者、 2013年01月21日
没有什么好的办法,逐位取出,是2的i次方,向前移动,直至数组下标为-1就好了
回复 点赞
wade_2003 2013年01月21日
引用 7 楼 ganpengjin1 的回复:
引用 5 楼 wade_2003 的回复: C/C++ code ? 1234567891011121314151617181920212223242526 #include <stdio.h> #include <stdlib.h> #include <string.h> int invert(const char *,int ); int main(void) { ……
嗯,我明白了为什么是41了,因为数字1001001的二进制为11110100011000101001,所以在计算的时候变成41了。现在一位一位计算的时候,我怎么把字符转换为 数字呢?
回复 点赞
漫步者、 2013年01月21日
引用 5 楼 wade_2003 的回复:
C/C++ code ? 1234567891011121314151617181920212223242526 #include <stdio.h> #include <stdlib.h> #include <string.h> int invert(const char *,int ); int main(void) { int number; cha……
你理解错了,01001001字符串转成数字为1001001,你的移位是将它的二进制移位,所以会是41!你还是采用从末尾开始计算,向前移动,直到数组下标为-1结束!就可以了。
回复 点赞
漫步者、 2013年01月21日
73,果断的.
回复 点赞
wade_2003 2013年01月21日

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

int invert(const char *,int );
int main(void)
{
	int number;
	char *pstr ="01001001";
	number = strlen(pstr);
	printf("%d",invert(pstr,number));
	return 0;
} 
int invert(const char *str,int n)
{
	int num;
	int i,sum =0;
	num = atoi(str);
	for(i=0;i<n;i++)
	{
		sum += (01 & num)* pow(2,i);
		num >>= 1;
	}
	return sum;
}
我写的这个程序怎么是 41 ,不是71呢? 这个程序的问题在哪里,请高手指点一下,谢谢!
回复 点赞
mymtom 2013年01月21日
被自己搞糊涂了,是73啊!
回复 点赞
GIS_wudi 2013年01月21日
可以烧书了,当然答案也不是你所说的71
回复 点赞
mymtom 2013年01月21日
确实是71啊! 用 strtol(pbin, NULL, 2); 就可以!
回复 点赞
lin5161678 2013年01月21日
着急了 结果是 73吧 十六进制的49
回复 点赞
发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告