#include <zhuangma.h>
/*************************************************
函数名称:ASCII_6bitASCII
功能描述:由ASCII码转换为6 BIT 的ASCII码
参数描述:返回值的00+6BIT 构成的一个字节
***************************************************/
char ASCII_6bitASCII(char ASCII_code)
{
unsigned char value;
if(ASCII_code<0x30)
return (0x80); //数据错误,恢复
else if(ASCII_code>0x77)
return (0x80);
else if(ASCII_code>0x57)
{
if(ASCII_code<0x60)
return(0x80);
else
value=ASCII_code+0x28;
}
else
value=ASCII_code+0x28;
if(value>0x80)
{
value=value+0x20; //区分是大于0x60的ASCII码
}
else
{
value=value+0x28; //小于0X57的ASCII码
}
return(value&0x3f); //取出低六位及为6BIT_ASCII
}
/*************************************************
函数名称:6bitASCII_ASCII
功能描述:由6 BITASCII码转换为 的ASCII码
***************************************************/
/*
char sixBITASCII_ASCII(char sixBIT_ASCII)
{
unsigned char value;
if(sixBIT_ASCII<0X28)
value=sixBIT_ASCII+0X30;
else
value=sixBIT_ASCII+0x38;
return(value);
}*/
/*******************************************************
函数名称:jiema
功能描述: 将6BIT数据串的每部分各自转换为一个数返回(6BIT是以一个字节形式存在的)
即,相当于将电文中每个参数BIT位连到一起
参数描述:返回值:都是unsignen long int,因为看大部分电文的参数最多也不超过4个字节
start:各个参数开始的BIT位
end: --------结束的BIT位
********************************************************/
long int jiema(int start,int end,char * shuju)
{
xdata int mod1,mod2,result1,result2,i,j,k,str[6],flag;
xdata unsigned long int value,temp;
result1=start/6;
mod1=start%6;
result2=end/6;
mod2=end%6;
if(mod1==0)
{
result1=result1-1;
mod1=6;
}
if(mod2==0) //避免START ,END 被除尽的时候出现错误
{
result2=result2-1;
mod2=6; //这儿关键
}
for(i=0;result1+i<=result2;i++) //把要转换的数重新保存到一个数组里
{
str[i]=shuju[result1+i];
}
flag=i-1;
str[0]=str[0]&(0xff>>(7-(6-mod1));//为了保证移位的最高位的正确性
if(result1==result2)
{
value=str[0];
value=value>>(6-mod2);
}
else
{
j=0;
value=0;
for(i=flag;i>=0;i--)
{
if(j<4)
{
k=j;
temp=str[i];
while(k!=0)
{
temp=temp<<8;
k--;
}
temp=temp>>((6-mod2)+j*2);
}
else
{
temp=str[flag-j];
temp=temp<<8;
temp=temp<<8;
temp=temp<<8;
if(j==4)
temp=temp>>((6-mod2)+j*2-8);
if(j==5)
temp=temp>>((6-mod2)+j*2-16);
}
value=value+temp;
j++;
}
}
return(value);
}
- 1
- 2
- 3
前往页