📄 transform.c
字号:
#define TRANSFORMMODULE
#include "config.h"
#include "transform.h"
/*******************************************************************************************************
** 函数名称: INT16S hexTo2Ascii(INT8U *data, char *buffer, INT16S len)
** 功能描述: 码值转化函数
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块:
** 作 者: 崔敬军
** 日 期: 2007年05月20日
**-------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
//数据类型转化,比如0x12 0x34转化为"1234\0"
//data 源数据区指针
//buffer 目的数据区指针
//len 源数据自己个数
//返回 目的数据区长度
INT16S hexTo2Ascii(INT8U *data, char *buffer, INT16S len)
{
const char ascTable[17] = {"0123456789ABCDEF"};
char *tmp_p = buffer;
INT16S i = 0;
INT16S pot = 0;
for( i = 0; i < len; i++ )
{
tmp_p[pot++] = ascTable[data[i] >> 4];
tmp_p[pot++] = ascTable[data[i] & 0x0F];
}
tmp_p[pot] = '\0';
return pot;
}
/*******************************************************************************************************
** 函数名称: INT8U asch(INT8U i)
** 功能描述: ASCII------ HEX
** 输 入: i---------- 待转化的数据
** 输 出: HEX
** 全局变量: 无
** 调用模块:
** 作 者: 崔敬军
** 日 期: 2007年05月20日
**-------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
//数据格式转换,比如'a'转换为0x0a
//i 源数据
//返回:转换后的数据
INT8U asch(INT8U i)
{
if(i >= 0x30 && i <= 0x39)
{
i -= 0x30;
}
else if(i >= 0x41 && i <= 0x46)
{
i -= 0x37;
}
return i;
}
/*******************************************************************************************************
** 函数名称: INT8U BCD2HEX(INT8U bcd_data)
** 功能描述: BCD-------- HEX
** 输 入: bcd_data--- 待转化的数据
** 输 出: HEX
** 全局变量: 无
** 调用模块:
** 作 者: 崔敬军
** 日 期: 2007年05月20日
**-------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
//数据格式转化,比如0x12转换为12
//
INT8U BCD2HEX(INT8U bcd_data)
{
INT8U temp;
temp = (((( bcd_data >> 4) * 10 ) + ( bcd_data % 16 )));
return temp;
}
/*******************************************************************************************************
** 函数名称: INT16U BCDToHex(INT16U bcd_data)
** 功能描述: BCD-------- HEX
** 输 入: bcd_data--- 待转化的数据
** 输 出: HEX
** 全局变量: 无
** 调用模块:
** 作 者: 崔敬军
** 日 期: 2007年05月20日
**-------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
INT16U BCDToHex(INT16U bcd_data)
{
INT16U temp;
temp = (bcd_data >> 12)*1000 + ((bcd_data >> 8)&0x0f)*100 + ((bcd_data >> 4)&0x0f)*10 + (bcd_data&0x0f);
return temp;
}
/*******************************************************************************************************
** 函数名称: INT8U HEX2BCD(INT8U hex_data)
** 功能描述: HEX--------BCD
** 输 入: hex_data--- 待转化的数据
** 输 出: BCD
** 全局变量: 无
** 调用模块:
** 作 者: 崔敬军
** 日 期: 2007年05月20日
**-------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
INT8U HEX2BCD(INT8U hex_data)
{
INT8U temp;
temp = (((hex_data /10) << 4 )|(hex_data%10));
return temp;
}
/*******************************************************************************************************
** 函数名称: INT16U Recive_T_M( INT8U * c , INT16U ReLeng )
** 功能描述: 接收转义处理
** 输 入: c--------待转义数组的首地址
ReLeng---带转义数据的数据长度
** 输 出: t--------转义的字节个数 c-----转义后的数据存储区
** 全局变量: 无
** 调用模块:
** 作 者: 崔敬军
** 日 期: 2007年05月20日
**------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
//接受转义处理,遇到0x5E 0x5D转换为0x5E, 遇到0x5E 0x7D转换为0x7E
//c 待转义数据区,转移后仍放在这个地址
//ReLeng 待转义数据区长度
//返回 转义的自己个数
INT32U Recive_T_M( INT8U * c , INT32U ReLeng )
{
INT32U t = 0;
INT32U i = 0;
for( i = 0; i < ReLeng ; i++ )
{
if(( c[i+t] == 0x5E ) && ( c[i+t+1] == 0x5D ))
{
c[i] = 0x5E;
t += 1;
}
else if(( c[i+t] == 0x5E ) && ( c[i+t+1] == 0x7D ))
{
c[i] = 0x7E;
t += 1;
}
else
{
c[i] = c[i+t];
}
}
return t;
}
/*******************************************************************************************************
** 函数名称: INT32U SplitData( INT8U * c , INT8U * string, INT8U ReLeng )
** 功能描述: 拆分处理(针对网管)
** 输 入: c--------待拆分数组的首地址
string---拆分后数组的首地址
ReLeng---拆分数据包的数据长度
** 输 出: t--------拆分后的字节个数
** 全局变量: 无
** 调用模块:
** 作 者: 崔敬军
** 日 期: 2007年05月20日
**------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
INT32U SplitData( INT8U * c , INT8U * string, INT32U ReLeng )
{
INT32U st = 0;
INT8U i = 0;
INT8U Hdata;
INT8U Ldata;
for( i = 0; i < ReLeng; i++ )
{
Hdata = (*c) / 16;
Ldata = (*c++) % 16;
if(Hdata <= 0x09) Hdata = Hdata + 0x30;
if(Ldata <= 0x09) Ldata = Ldata + 0x30;
if(Hdata >= 0x0A && Hdata<=0x0F) Hdata = Hdata + 0x37;
if(Ldata >= 0x0A && Ldata <= 0x0F) Ldata = Ldata + 0x37;
*string++ = Hdata;
*string++ = Ldata;
}
st = ReLeng * 2;
return st;
}
/*******************************************************************************************************
** 函数名称: INT32U Compages( INT8U * c , INT8U * string, INT8U ReLeng )
** 功能描述: 组合处理(针对网管)
** 输 入: c--------待组合数组的首地址
string---组合后数组的首地址
ReLeng---组合数据包的数据长度
** 输 出: t--------组合后的字节个数
** 全局变量: 无
** 调用模块:
** 作 者: 崔敬军
** 日 期: 2007年05月20日
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -