处理十六进制字符串换成对应的十进制整型数

        根据书本例子,可得一种方法。十六进制。。。。。。等等,严谨写文章,不然没人看!接下来要学习计数。

        算了,等我学习好再讨论计数论。华夏知识 《中算家的计数论》—— 罗见今

        十六进制转换十进制,十六的零到若干次方,代表着个位、十位、百位、千位等。数的每位十六次方乘以当前位的计数符号代表值的和,即可得到对应十进制数。

当前思想就是,一个十六进制数出现多少位就乘上多是个十六,个位是零、十位是一,以此类推。

/*****************************************************************************
 *	笔者:老年痴呆的梦				            *
 *	编码:GB 18030				            *
 *	语言:C语言				            *
 *****************************************************************************/		
/* 十六机制字符串转换成十进制整型数 */
#include <stdio.h>

int htoi (char str[]);

int main (void)
{
	char str[1024];
	printf ("请输入十六进制字符串:\n");
	scanf ("%s",&str);
	if (htoi(str) != 0)
		printf ("%s ->> %d\n",str,htoi(str)); 
	else
		printf ("书写格式错误!\n");
		 
	return 0;
}
/* 函数定义 */
int htoi (char s[])
{
	int i , n;
	int state = 0;
	n = 0;
	
	for (i = 0; s[i] != '\0'; ++i)
	{
		if (s[i] == '0' && s[i + 1] == 'x' || s[i +1] == 'X')
		{
			++i;
			state = 1;
		}
		else if (state == 1)
			if (s[i] >= '0' && s[i] <= '9')
				n = 16 * n + (s[i] - '0');
			else if (s[i] >= 'a' && s[i] <= 'f')
				n = 16 * n + (s[i] - '0' - 39);
			else if (s[i] >= 'A' && s[i] <= 'F')
				n = 16 * n + (s[i] - '0' - 7);
			else
				state = 0;	
	}
	return n;	
}

                                                                                                                                     

修改完整版:

        

/*****************************************************************************
 *	笔者:老年痴呆的梦				            *
 *	编码:GB 18030				            *
 *	语言:C语言				            *
 *****************************************************************************/
/* 把一个十六进制字符串转换成十进制整形数值 */		
#include <stdio.h>

int htoi(char s[]);

int main ()
{	
	/*int 4字节 最大绝对值 1073,741,824 0x4000,0000  8个字符再加上4个字符。*/
	char s[12];
	printf ("请输入一个十六进制字符串--- \n");
	scanf ("%s",&s);
	printf ("对应的十进制数\n------0v0 %d\n",htoi (s));
	return 0;
}

int htoi (char s[])
{
	int i, n ;
	short state = 0;
	short polarity = 1; 

	n = 0;
	for (i = 0; s[i] != '\0'; ++i)
	{
		if (s[i] == '-')
			polarity = -1;
		else if (s[i] == '0' && s[i + 1] == 'x' || s[i + 1] == 'X')
			state = 1;
		else if (state == 1)
			if (s[i] >= '0' && s[i] <= '9')
				n = 16 * n + (s[i] - '0');
			else if (s[i] >= 'a' && s[i] <= 'f')
				n = 16 * n + (s[i] - '0' - 39);
			else if (s[i] >= 'A' && s[i] <= 'F')
				n = 16 * n + (s[i] - '0' - 7);	
	}
	return n * polarity;	
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值