某通讯单位打算传递一段信息“XYZWYZWZYWYXZY”,将字母W,X,Y,Z分别用不同的0,1编码进行表示

来源:百度知道 编辑:UC知道 时间:2024/06/28 04:59:32
急需此题的代码,请用C编,非常感谢!!!
某通讯单位打算传递一段信息“XYZWYZWZYWYXZY”,为提高安全性,打算将字母W,X,Y,Z分别用不同的0,1编码进行表示,并希望编码后,该段信息的编码总长度越短越好。请编写程序设计编码方案。

#include<stdio.h>
#include<stdlib.h>

void main()
{
char a[1000] = "XYZWYZWZYWYXZY";
int b[1000];
int i,len,n,N,k;
int code;
// 编码结果d[],一个byte存4个字母编码
unsigned char d[250];
// code_wxyz 编码表w=0x00,x=0x01,y=0x02,z=0x03
unsigned char code_wxyz[4] = {0x00,0x01,0x02,0x03};
len = strlen(a);

// 替换wxyz 到 0,1,2,3 放在b[i]里
for (i=0;i<len;i++){
sscanf(a+i,"%c", &code);
b[i] = code - 'W';
printf("%d",b[i]);
}

// 如果字母个数不是4的整倍数,要注意,
// 你要自己处理余下的几个字?
n=0;
for (i=0;i<len;i=i+4) {
d[n] = (code_wxyz[b[i]] & 0x03) << 6 | (code_wxyz[b[i+1]] & 0x03) << 4 | (code_wxyz[b[i+2]] & 0x03) << 2 | (code_wxyz[b[i+3]] & 0x03);
n = n + 1;
};

// 一个byte一个byte发送, 共发送 n 个 d[i],

// 接收端解码成0123的方法如下,有了0123就可查编码表打出wxyz
printf("\n%2d%2d%2d%2d", (d[0] & 0xc0)>>6,