8583包中使用的压缩bcd
bcd码是一种用二进制编码的十进制数,又称二十一进制数。它是用4位二进制数表示一个十进制码的,由于这4位二进制数的权为8421,所以bcd码又称8421码。
然而这样做有什么好处呢
在32位机中,定义一个short int变量有2字节一个char有1字节。一般发数据我们都以一个字符为单位,一个数字占一个字节,当我们用两个数字,一个数字占据高4位,一个数字占据低4位。存在一个char里,这个char占一个字节存着两个数字,用字符存的话,要两个字节才能存两个数字
例如存12数据
Char a =’1’;
Char b=’2’;
也可以采用压缩bcd编码00010010
Unsinged Char c=17;//c的范围在0到255,代表0-0xff.
这样发送数据协议就短很多
下面程序可以将收到的压缩后协议数据以ascll码显示出来
int translate(FILE *fp1)
{
int size ;
char str[100],a[100] ,b[100];
fseek(fp,0,2);
size = ftell(fp);
fread(str,size,1,fp1);
while(!feof)
{
for(i = 0 ; i<= size ;i++)
{
a[i] = (str[i] >> 4) & 0x0f +0x30;
b[i] = str[i] & 0x0f + 0x30 ;
printf("%c %c",a[i],b[i]);
}
}