C 十六进制与char,int相互转换

int 转十六进制

int IntToHex(int nValue, char *pHexOut, int nHexLen)
{
	int nTmp = 0;
	//int 占8*4 bit
	int nCount = 0;
	for (int i = 7; i >= 0; i--)
	{
		nTmp = ((nValue >> (4 * i)) & 0x0F);
		if (nTmp >= 10)
		{
			pHexOut[nCount] = 'A' + (nTmp - 10);
		}
		else
		{
			pHexOut[nCount] = '0' + nTmp;
		}
		nCount++;
	}

	return 0;
}

十六进制转int

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

int Char2Int(char c)
{
	if (isdigit(c))
	{
		return c - '0';
	}
	if (c < 'A' || (c > 'F' && c < 'a') || c > 'z')
	{
		return -1;
	}	
	if (isalpha(c))
	{
		// 如果是大写字母减去55   如果是小写字母减去87
		return isupper(c) ? c - 55 : c - 87;
	}
	return -1;
}

int HexToInt(char *hex, int hexLen, int *pValue)
{
	if (NULL == hex || NULL == pValue)
	{
		return -1;
	}
	int nValue = 0;
	int tmpValue;
	int bits;

	for (int i = 0; i < hexLen; i++)
	{
		tmpValue = Char2Int(*(hex + i));
		//16进制位占4 bit
		bits = (hexLen - i - 1) * 4;
		tmpValue = tmpValue << bits;
		nValue += tmpValue;
	}
	*pValue = nValue;
	return 0;
}

Char 转十六进制

int CharToHex(const char *pInput, int nIlen, char *pOut)
{
	if (NULL == pInput || NULL == pOut)
	{
		return -1;
	}
	char strBuf[33] = { 0 };
	char pbuf[33];
	int i;
	for (i = 0; i < nIlen; i++)
	{
		sprintf(pbuf, "%02X", pInput[i]);
		strncat(strBuf, pbuf, 2);
	}
	strncpy(pOut, strBuf, nIlen * 2);

	return 0;
}

十六进制转Char

int HexToChar(const char *pHexSource, int nHexLen, char *pOut, int outLen)
{
	if (NULL == pHexSource || NULL == pOut)
	{
		return -1;
	}
	if (nHexLen/2 >= outLen)
	{
		return -1;
	}
	memset(pOut, 0, outLen);
	for (int i = 0; i < nHexLen / 2; i++)
	{
		sscanf(pHexSource + i * 2, "%2X", pOut + i);
	}
	return 0;
}

//完整的测试代码

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

/*
* 将字符转换为数值
* */
int Char2Int(char c)
{
	if (isdigit(c))
	{
		return c - '0';
	}
	if (c < 'A' || (c > 'F' && c < 'a') || c > 'z')
	{
		return -1;
	}	
	if (isalpha(c))
	{
		// 如果是大写字母减去55   如果是小写字母减去87
		return isupper(c) ? c - 55 : c - 87;
	}
	return -1;
}

/*
* 功能:将十六进制字符串转换为整型(int)数值
* */
int HexToInt(char *hex, int hexLen, int *pValue)
{
	if (NULL == hex || NULL == pValue)
	{
		return -1;
	}
	int nValue = 0;
	int tmpValue;
	int bits;

	for (int i = 0; i < hexLen; i++)
	{
		tmpValue = Char2Int(*(hex + i));
		//16进制位占4 bit
		bits = (hexLen - i - 1) * 4;
		tmpValue = tmpValue << bits;
		nValue += tmpValue;
	}
	*pValue = nValue;
	return 0;
}

int IntToHex(int nValue, char *pHexOut, int nHexLen)
{
	int nTmp = 0;
	//int 占8*4 bit
	int nCount = 0;
	for (int i = 7; i >= 0; i--)
	{
		nTmp = ((nValue >> (4 * i)) & 0x0F);
		if (nTmp >= 10)
		{
			pHexOut[nCount] = 'A' + (nTmp - 10);
		}
		else
		{
			pHexOut[nCount] = '0' + nTmp;
		}
		nCount++;
	}

	return 0;
}

#include <algorithm>
int HexToChar(const char *pHexSource, int nHexLen, char *pOut, int outLen)
{
	if (NULL == pHexSource || NULL == pOut)
	{
		return -1;
	}
	if (nHexLen/2 >= outLen)
	{
		return -1;
	}
	memset(pOut, 0, outLen);
	for (int i = 0; i < nHexLen / 2; i++)
	{
		sscanf(pHexSource + i * 2, "%2X", pOut + i);
	}
	return 0;
}

int CharToHex(const char *pInput, int nIlen, char *pOut)
{
	if (NULL == pInput || NULL == pOut)
	{
		return -1;
	}
	char strBuf[33] = { 0 };
	char pbuf[33];
	int i;
	for (i = 0; i < nIlen; i++)
	{
		sprintf(pbuf, "%02X", pInput[i]);
		strncat(strBuf, pbuf, 2);
	}
	strncpy(pOut, strBuf, nIlen * 2);

	return 0;
}


int main()
{
	char c = 55;
	char b = 87;
	char hex[64] = { "61626364313233345758595A2123262A" };
	 HexToChar(hex, strlen(hex), a, 16);
	 int nValue = 0;
	 HexToInt("00000000075BCD15", strlen("00000000075BCD15"), &nValue);
	 char tmHex[64] = { 0 };
	 IntToHex(nValue, tmHex, 64);

	 char szTmp[64] = { 0 };
	 CharToHex("abcd1234WXYZ!#&*", strlen("abcd1234WXYZ!#&*"), szTmp);

	return 0;
}

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值