字符转整型,比系统的好用!a2iLxx (涵盖 16进制,VC6亲测可用)请提出宝贵意见~

#include "string.h"
#define INVALID_VALUE_LXX	((1 << (8 * sizeof(int) -1)) - 1)
/*有符号整型最大值,如果越界将为0, and - is prioty of <<*/
#define A2a(ch) (('a' <= (ch) && (ch) <= 'f') ? (ch) : ((ch) - 'A' + 'a'))

bool is0to9(char ch)
{
	if ('0' <= ch && ch <= '9')
	{
		return true;
	}
	else
	{
		return false;
	}
}

bool isatoF(char ch)
{
	if (('a' <= ch && ch <= 'f') || ('A' < ch && ch <= 'F'))
	{
		return true;
	}
	else
	{
		return false;
	}
}

int a2iLxx(char* ch)
{
	int index = 0;
	int retVal = 0;
	bool flag = false;
	if (NULL == ch)
	{
		return INVALID_VALUE_LXX;
	}

	/*Ox*/
	if ('0' == ch[0] && ('x' == ch[1] || 'X' == ch[1]))
	{
		index = 2;
		for (; ch[index] != '\0'; index++)
		{
			/* x * 2^y == x * 1 << y */
			if (is0to9(ch[index]))
			{
				retVal = (retVal << 4) + ch[index] - '0';
				continue;
			}

			if (isatoF(ch[index]))
			{
				retVal = (retVal << 4) + 10 + A2a(ch[index]) - 'a';
				continue;
			}

			return INVALID_VALUE_LXX;

		}
		return retVal;
	}

	/*10*/
	index = 0;
	if ('-' == ch[0])
	{
		/*负数*/
		flag = true;
		index = 1;
	}

	for (; ch[index] != '\0'; index++)
	{
		if (!is0to9(ch[index]))
		{
			return INVALID_VALUE_LXX;
		}
		retVal = retVal * 10 + ch[index] - '0';
	}

	if (flag)
	{
		return -retVal;
	}
	else
	{
		return retVal;
	}
}

void main()
{
	char ch1[] = "123";
	char ch2[] = "-234";
	char ch3[] = "0";
	char ch4[] = "0x123";
	char ch5[] = "0xff";
	int a = INVALID_VALUE_LXX;
	char d1 = A2a('a');
	char d2 = A2a('B');
	/*调试查看值*/
	a = a2iLxx(ch1);
	a = a2iLxx(ch2);
	a = a2iLxx(ch3);
	a = a2iLxx(ch4);
	a = a2iLxx(ch5);
}

时间: 2024-10-13 21:01:48

字符转整型,比系统的好用!a2iLxx (涵盖 16进制,VC6亲测可用)请提出宝贵意见~的相关文章

Windows系统忘记密码怎么办?如何破解密码?(亲测可用)

国外有一个工具:LazesoftRecoverMyPassword软件,可用于系统密码破解与清除工具,它可以轻松移除 Windows 系统的登录密码,快速破解与清除电脑开机密码,也可以重置密码或者设置为空密码,解锁被锁定或禁用的用户帐户.其原理就是通过创建一个启动盘来破解Windows开机密码. 所需软件: (1)LazesoftRecoverMyPassword软件 (2)UltraISO软件 具体步骤如下: 1.下载并安装LazesoftRecoverMyPassword软件: 2.生成镜像

超级(无限)大的 --- 整型10进制数据与16进制数据相互转换

<html> <title>超级(无限)大的 --- 整型10进制数据与16进制数据相互转换</title> <head> <meta charset="utf-8"/> <meta name="keywords" content="数据压缩算法,超过整数表示范围的大数据算术运算,大进制数据互相转换" /> <meta name="keywords"

0x%02x 字符型的16进制输出

问题:将一个字符类型按16进制输出,输出格式为0xab, 0x后面要求是2位,不够2位则补0,比如“0x0b”. 常见的错误做法是: #include <stdio.h> int main() { char a = 0x41; // a = 'A' printf( "the hex value of a is 0x%02x\n", a ); return 0; } 如果a = 0xf1,上面的输出将是 0xfffffff1 而不是 0xf1. 究其原因,%x 是 unsig

ColorUtil【Color工具类(color整型、rgb数组、16进制互相转换)】

版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 主要用于color整型.rgb数组.16进制互相转换(-12590395 <--> #3FE2C5 <--> [63,226,197]) 效果图 暂不需要 代码分析 color的int类型值转16进制类型值包括两种方案: 方案一:思路:计算&16777215的值,然后通过字符串获取16进制数值. /**Color的Int整型转Color的16进制颜色值[方案一] * colorInt - -12590395 * r

MFC中如何将16进制字符转化成10进制,包括CString与char*的转换

1 CString m_str; 2 m_str="1F"; //16进制字符为1F 3 m_str = "0x"+m_str; 4 char *p= (char*)((LPCTSTR)m_str); //将CString的字符m_str转化成char*型,并赋值给指针p 5 char *str; 6 int m_Speed = (int)strtol(p, &str, 16); //十六进制转化成10进制,并赋值给整形数据m_Speed

用js正则判断输入的两位字符,第一位是数字16进制的,第二位是I、O、Q、U除外的字母(A到Z)

项目中遇到客户的需求变化,要验证某个数据的正确性,判断输入的两位字符,第一位是数字16进制的,第二位是I.O.Q.U除外的字母(A到Z). 本来对js不熟练,网上参考了一下js正则验证的规则,使用正则表达式完成了这个验证. 1 function check() { 2 var str = document.getElementById("txtEnglishName").value; 3 var reg=/^[0-9a-fA-F][^IOQU]$/; 4 if (str.length!

isxdigit(测试字符是否为16进制数字)

/*isxdigit(测试字符是否为16进制数字) 相关函数 isalnum,isdigit 表头文件 #include<ctype.h> 定义函数 int isxdigit (int c) 函数说明 检查参数c是否为16进制数字,只要c为下列其中一个情况则返回TRUE.16进制数字:0123456789ABCDEF 返回值 若参数c为16进制数字,则返回TRUE,否则返回NULL(0). 附加说明 此为宏定义,非真正函数. 范例 */ /*找出字符串str中为十六进制数字的字符*/ #inc

字符转换(2,8,10,16进制,ASCII码)

罗列了一些用到的,各进制 以及 ASCII 间的转换,记录备忘 一,先说说 2,8,10 ,16 各进制之间的转化 System.Convert类中提供了较为全面的各种类型.数值之间的转换功能: 几个比较常用的方法  1,Convert.ToInt32(string value, int fromBase)  :将字符串转换为数字(如2进制0010>也就是2^1=2)  fromBase: 顾名思义参数的进制(2,,8,10,16)     2,Convert.Tostring(int valu

16进制ascii码转化为对应的字符,付ipmitool查询硬件信息

最近工作需要在用ipmitool查询服务器硬件信息.ipmitool查询硬件信息 比如电源,使用命令: 获取PSU0信息:Ipmitool raw 0x3a 0x71 0x00: 获取PSU1信息:Ipmitool raw 0x3a 0x71 0x01: 但是得到的信息是这样的: 完全没有可读性,这些数字是16进制的ascii,平时我们看到的ascii都是10进制的,0—255,这里转化成16进制了. 想要知道对应的信息,刚开始想着要先把16进制转化为10进制,在转化成对应的ascii字符,网上