程序中经常会用代 字符串转换成数字的功能:
方法一:
这个函数使用了两个参数,一个是字符串指针;一个是指向字符串指针的指针,用来传递回原指针地址。
返回值是转换过来的int型数。
代码实现如下:
#include <stdio.h>
#include <string.h>
unsigned int strHex(char *str, char **end)
{
unsigned int hex = 0;
// Accept leading 0x
if (str[0] == '0' && str[1] == 'x')
str += 2;
while (*str) {
if (*str >= '0' && *str <= '9') { // 数字情况
hex <<= 4; // 左移4位,表示16进制左移1位
hex += (*str - '0');
}
else if (*str >= 'a' && *str <= 'f') { // a - f 情况
hex <<= 4;
hex += 0xa + (*str - 'a');
}
else if (*str >= 'A' && *str <= 'F') { // A -F 情况
hex <<= 4;
hex += 0xa + (*str - 'A');
}
else {
*end = str; //转换完成后, str结束地址赋给*end
return hex;
}
str++;
}
*end = str;
return hex;
}
int main()
{
char *str = "0xf1F2f3F4";
unsigned int hex = 0;
hex = strHex(str, &str);
printf("hex = 0x%X\n", hex);
}
方法二:
如果不需要传递回来指针地址,就只需要一个参数就行了。
#include <stdio.h>
#include <string.h>
unsigned int strHex(char *str)
{
unsigned int hex = 0;
char *tmp = str;
// Accept leading 0x
if ((tmp[0] == '0' && tmp[1] == 'x') ||
(tmp[0] == '0' && tmp[1] == 'X'))
tmp += 2;
while (*tmp) {
if (*tmp >= '0' && *tmp <= '9') { // 数字情况
hex <<= 4; // 左移4位,表示16进制左移1位
hex += (*tmp - '0');
}
else if (*tmp >= 'a' && *tmp <= 'f') { // a - f 情况
hex <<= 4;
hex += 0xa + (*tmp - 'a');
}
else if (*tmp >= 'A' && *tmp <= 'F') { // A -F 情况
hex <<= 4;
hex += 0xa + (*tmp - 'A');
}
else {
printf("invalid value input\n");
return hex;
}
tmp++;
}
return hex;
}
int main()
{
char *str = "0xf1F2f3F4";
unsigned int hex = 0;
hex = strHex(str);
printf("hex = 0x%x\n", hex);
}