字符串、十六进制转10进制形式转换

#include "hexstring.h"
#include <string.h>
#include "math.h"
#include <stdlib.h>
/***************************************************************
* 函数名称: *StringToByte
* 说    明:字符串转字节串
* 参    数: char *pString,需要转换的字符串
*			unsigned char *pByte,转换之后的字节串
* 返 回 值: 转换之后的字节串
***************************************************************/
unsigned char *StringToByte(char *pString, unsigned char *pByte)
{
	unsigned int i, len = strlen(pString) / 2;
	char Hex[3] = { 0 };

	for (i = 0; i < len; i++)
	{
		memcpy(Hex, pString + 2 * i, 2);
		pByte[i] = strtol(Hex, NULL, 16);
	}
	return pByte;
}

/***************************************************************
* 函数名称: *ByteToString
* 说    明:字节转字符串
* 参    数: unsigned char *pByte,需要转换的字节串
*			char *pString,转换之后的字符串
*			unsigned int len,len是转换之前string的长度
* 返 回 值: 转换之后字符串
***************************************************************/
char *ByteToString(unsigned char *pByte, char *pString, unsigned int len)
{
	unsigned int i;
	char a, b;
	for (i = 0; i<len; i++)
	{
		a = *(pByte + i) / 16;
		b = *(pByte + i) % 16;
		if (a <= 9 && b <= 9)
		{
			*(pString + i * 2) = a + '0';
			*(pString + i * 2 + 1) = b + '0';
		}
		else if (a <= 9 && b>9)
		{
			*(pString + i * 2) = a + '0';
			*(pString + i * 2 + 1) = b - 10 + 'A';
		}
		else if (a>9 && b <= 9)
		{
			*(pString + i * 2) = a - 10 + 'A';
			*(pString + i * 2 + 1) = b + '0';
		}
		else
		{
			*(pString + i * 2) = a - 10 + 'A';
			*(pString + i * 2 + 1) = b - 10 + 'A';
		}
	}
	*(pString + i * 2) = '\0';
	return pString;
}

/***************************************************************
* 函数名称: *DecToString
* 说    明:十进制数转字符串形式
* 参    数: unsigned int Dec,需要转换的十进制数据
*			char *pString,转换之后的字符串
* 返 回 值: 转换之后字符串
***************************************************************/
char *DecToString(unsigned int Dec, char *pString)
{
	unsigned char i = 0, j = 0;
	unsigned int Num;
	Num = Dec;
	while (Num >= 10)
	{
		Num /= 10;
		i++;
	}
	i++;
	while (i)
	{
		*(pString + j) = Dec / pow(10, i - 1) + '0';
		Dec %= (uint16_t)pow(10, i - 1);
		i--;
		j++;
	}
	*(pString + j) = '\0';
	return pString;
}
/*
十六进制字符串转字符串函数
*/
void HexStrToStr(const unsigned char *source, unsigned char *dest, int sourceLen)
{
    short i;
    unsigned char highByte, lowByte;
    for (i = 0; i < sourceLen; i += 2)
    {
        highByte = toupper(source[i]);
        lowByte  = toupper(source[i + 1]);
        if (highByte > 0x39)
            highByte -= 0x37;
        else
            highByte -= 0x30;
        if (lowByte > 0x39)
            lowByte -= 0x37;
        else
            lowByte -= 0x30;
        dest[i / 2] = (highByte << 4) | lowByte;
    }
    return ;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值