0xe5,0xbc,0x35 /******************************************************************** created: " />
入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

hex_string_to_hex.c

创建时间:2012-02-22 投稿人: 浏览次数:1880

输入:一串16进制的字串

输出:由字串转换出来的16进制数值

例如 "E5BC35" -->0xe5,0xbc,0x35

/********************************************************************
	created:	2012/02/21
	filename: 	hex_string_to_hex.c
	author:		
	
	purpose:	
*********************************************************************/

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

//-------------------------------------------------------------------

static int oneHexCharToHex(char h)
{
	int x = 0;
	if (isdigit(h)) {
		x = h - "0";
	} else if (isupper(h)) {
		x = h - "A" + 10;
	} else {
		x = h - "a" + 10;
	}
	return x;
}

/*Chaneg TEXT HEX such as E5BC35 to 
* E5BC35 -->0xe5,0xbc,0x35
* inStr must >0 otherwise return -1*/
int ChangeTHEX2CPTR(const char * inHexString, char * outHex)
{
	int success = -1;
	int len = 0;
	int i;
	char ch1, ch2;
	do 
	{
		if (NULL == inHexString || NULL == outHex) {
			printf("error: inHexString or outHex is null!
");
			break;
		}
		len = strlen(inHexString);
		if (len <= 1) {
			printf("error: strlen(inHexString) <= 1!
");
			break;
		}
		len &= ~1;
		for (i=0; i<len; i+=2) {
			ch1 = inHexString[i];
			ch2 = inHexString[i+1];
			outHex[i/2 + 1] = 0;
			if (isxdigit(ch1) && isxdigit(ch2)) {
				ch1 = oneHexCharToHex(ch1);
				ch2 = oneHexCharToHex(ch2);
				outHex[i/2] = (ch1 << 4) | ch2;
			} else {
				printf("error: %c or %c is not hex digit!
", ch1, ch2);
				goto exit;
			}
		}
		success = 0;//OK
	} while (0);
exit:
	return success;
}

#define TEST_ChangeTHEX2CPTR
#ifdef TEST_ChangeTHEX2CPTR

static void printf_outHex(const char * outHex)
{
	int len = strlen(outHex);
	int i;
	for (i=0; i<len; i++) {
		printf("0x%x,", outHex[i] & 0xff);
	}
	printf("
");
}

void test_ChangeTHEX2CPTR(void)
{
	char buffer[256] = {0};

	ChangeTHEX2CPTR("E", buffer);
	printf_outHex(buffer);

	ChangeTHEX2CPTR("E5BC35", buffer);
	printf_outHex(buffer);

	ChangeTHEX2CPTR("EX4", buffer);
	printf_outHex(buffer);

	ChangeTHEX2CPTR("E5B", buffer);
	printf_outHex(buffer);
}
#endif
//-------------------------------------------------------------------


声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。