htoi的实现

 1 /*************************************************************************
 2     > File Name: htoi.c
 3     > Author: ChenPeng
 4     > Mail:[email protected]
 5     > Blog: http://www.cnblogs.com/cpsmile/
 6     > Created Time: Fri 03 Apr 2015 07:22:15 PM CST
 7  ************************************************************************/
 8 #include<stdio.h>
 9 #include<stdlib.h>
10
11 #define YES 1
12 #define NO 0
13
14 /*将十六进制数字组成的字符串转换为与之等价的整型值*/
15 int htoi(char *str)
16 {
17     int hexdigit;//记录每一个十六进制数对应的十进制数
18     int i;//工作指针
19     int ishex;//是否是有效的十六进制数
20     int n;//返回的十进制数
21
22     i= 0;
23     if(str[i] == ‘0‘)
24     {
25         ++i;
26         if(str[i] == ‘x‘ || str[i] == ‘X‘)
27             ++i;
28     }
29     n = 0;
30     ishex = YES;
31     for(; ishex == YES; ++i)
32     {
33         if(str[i] >= ‘0‘ && str[i] <= ‘9‘)
34             hexdigit = str[i] - ‘0‘;
35         else if(str[i] >= ‘a‘ && str[i] <= ‘f‘)
36             hexdigit = str[i] - ‘a‘ + 10;
37         else if(str[i] >= ‘A‘ && str[i] <= ‘F‘)
38             hexdigit = str[i] - ‘A‘ + 10;
39         else
40             ishex = NO;
41         if(ishex == YES)
42             n = 16 * n + hexdigit;
43     }
44     return n;
45 }
46
47 int main()
48 {
49     char str[30] = "";
50     int val;
51     while(printf("Please enter a hex string:\n"),scanf("%s",str) == 1)
52     {
53         val = htoi(str);
54         printf("整数是:%d\n",val);
55     }
56     return 0;
57 }
时间: 2024-11-01 15:56:02

htoi的实现的相关文章

扩展《C程序设计语言》练习2-3程序通用性

最近开始自学C语言,在看K&R的<C程序设计语言>.练习2-3要求写一个函数,将输入的十六进制数字字符串转换成与之等价的整数值,配套答案没有扩展程序的通用性,所以我就稍微改造改造. 配套的答案是这样的(自己添加了注释): 1 #define YES 1 2 #define NO 0 3 4 /* htoi:将十六进制数字字符串转换成十进制数 5 * 如果发现'0x'或'0X'则跳过并设置十六进制数的起点 6 * 检查后续字符是否是0-9,a-f或是A-F 7 * 如果是则将其转换为整形

The C Programming Language (second edition) 实践代码(置于此以作备份)

1. #include <stdio.h> #include <stdlib.h> #include <math.h> #include<time.h> #define myPrint(expr) printf(#expr " =%d\n",expr); //2-3 int htoi(char *s) { int n=0; while(*s!='\0') { if (*s=='x' || *s=='X') { n=0; } else if

嵌入式开发之字符叠加---gb2313 国标码,utf8 国际码,unicode 无码

(1)国标码简介 (2)编码转换 (3)时间获取 (4)显示切换 最近做了个字符叠加,包括时间叠加,字符中文叠加,位置移动,等功能开启.因为一般的字符叠加的点阵式16位,然后填充着16位的编码是gb2313编码,比如说视讯两个字, 先是视: 编码类型 二进制编码 十六进制编码 Unicode 10001001 11000110 0x89C6 UTF-8 11101000 10100111 10000110 0xE8A786 GB2312 11001010 11010011 0xCAD3 然后讯:

C语言将字符串转换成对应的数字(十进制、十六进制)【转】

转自:http://wawlian.iteye.com/blog/1315133 问题1:讲一个十进制数字的字符串表示转换成对应的整数.举例:将“1234”转换成整数1234. C代码 收藏代码 /*将字符串s转换成相应的整数*/ int atoi(char s[]) { int i; int n = 0; for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i) { n = 10 * n + (s[i] - '0'); } return n;

十六进制与十进制之间的转换

/*编写函数htoi(s),把由十六进制数字组成的字符串(包含可选的请前缀0x或0X)转换为与之等价的 整型值.字符串中允许包含的数字包括:0~9,a~f以及A~F.*/ /*利用ASCII的差值*/ #include<stdio.h> #include<math.h> int htois(char s[]) { int length=0,i=0; double num; while(s[length]!='\0') length++; while(s[i]!='\0')    

网页端的utf8和gb2312 之间关于osd 传参数的乱码问题

(0)HZK16 点阵字库原理及实现 (1)utf8 和 unicode gb2312之间的转换 (2)gb2312 的拓展 gbk 实现了更多的文字编码 像“瞭望塔”的瞭子在gb2312中是没有的 华丽分割线 ---------------------------author:pkf ----------------------------------time:2014-03 ----------------------------------------qq:1327706646 (0)HZ

Why do we use n = 16 * n + hexdigit

Go to my personal blog There is a program to convert a string of hexadecimal digits into its equivalent integer value as below. enum loop {NO, YES}; /* htoi: convert hexadecimal string s to integer */ int htoi(char s[]) { int hexdigit, i, n; enum loo

the c programming language 2-3

#include<stdio.h> #define MAXLINELEN 1000 int power(int base,int n) { int i=0; int answer=1; for(i=0;i<n;i++) answer=answer*base; return answer; } /*strlen函数:返回s的长度*/ int strlen(char *s) { int i; i=0; while(s[i]!='\0') ++i; return i; } /*getline函