/******************************************************************************
函 数 名:HexToAscII
功 能:把金额HEX转换为ASC,如0x0c转为"12",0x0c,0x0c转为"3084"
参数说明:
参数1:
参数2:
返 回 值:成功返回0 失败返回-2
描 述:无
******************************************************************************/
static int HexToAscII(unsigned char *src, int slen, char *dst, int dlen)
{
long num=0;
int i = 0;
char TempBuf[32];
if (dlen>32 || slen>8 || slen>dlen)
{
//debug
sprintf(printf_buf,"HexToAscII len error/r/n");
Uart_Printf();
return -2;
}
for (i=0; i<slen; i++)
{
num += (src[i] << (slen-1-i)*8);
}
sprintf(TempBuf, "%d", num);
memset(dst, '0', dlen);
memcpy(dst+dlen-strlen(TempBuf), TempBuf, strlen(TempBuf));
return 0;
}
/******************************************************************************
函 数 名:AscIIToHex
功 能:把金额ASC转换为HEX,如"12"转为0x0c,"3084"转为0x0c,0x0c
参数说明:
参数1:
参数2:
返 回 值:成功返回0 失败返回-2
描 述:无
******************************************************************************/
static int AscIIToHex(char *src, int slen, char *dst, int dlen)
{
long num=0;
int i = 0;
char TempBuf[32];
memset(TempBuf, 0, sizeof(TempBuf));
memcpy(TempBuf, src, slen);
num = atoi(TempBuf);
if (slen>32 || dlen>8 || dlen>slen)
{
//debug
sprintf(printf_buf,"AscIIToHex len error/r/n");
Uart_Printf();
return -2;
}
for (i=0; i<dlen; i++)
{
dst[i] = (num >> (dlen-1-i)*8)&0x00000000FF;
}
return 0;
}
这篇博客介绍了两个静态函数,HexToAscII和AscIIToHex,用于将金额的HEX形式转换为ASCII,以及反之。HexToAscII函数接收HEX字符串并转换成对应的ASCII字符,而AscIIToHex则将ASCII字符串转化为HEX表示。函数中包含了错误检查和转换逻辑,例如数值溢出和长度验证。
4909





