一个理论性的问题
串口通信中可传出例如 "中国" 的字符出去
现在问题是这样的,我根据我的需要,将这两个字
在程序中转换成每个字24比特二制码,存于数组中,
现在遇到了悖论,如果一个1一个0的传无疑把一个
比特做为一个字节考虑,十分愚蠢,有办法将数组中的
二进制码做为比特传出去吗?

解决方案 »

  1.   

    声明数组的时候就byte不可以吗?
      

  2.   

    你把它转换成24个bit的二进制码以后,就可以把它转换成asc2码了。然后你传asc2码就可以了。这样你只需要传送3个字节。
    比如说:
     int data1[8], data2[8], data3[8];//这3个数组放了“中国”两个字。
     int a1, a2, a3;
        a1=data[0]*1+data[1]*2+data[2]*4...+data[7]*128;
        a2=...
        a3=...
    这样你就讲它转换成3个字节了。
      

  3.   

    你的问题转化成了将一个数组组合成一个字节的问题了。将这24个数组元素转换成3个字节,然后发送即可。下面时用TC2.0编的东西。main()
    {
        int d1[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};    int d2[8]={0,0,1,1,0,1,0,1};  /* =53  */
        int i;
        int dd=0x00;
        for(i=7;i>=0;i--){
            if(d2[i])
                dd=dd|d1[i];
            else
                dd=dd|0x00;
        }    printf("\n%d",dd);
    }================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★  浏览帖子速度极快![建议系统使用ie5.5以上]。 ★  多种帖子实现界面。 
    ★  保存帖子到本地[html格式]★  监视您关注帖子的回复更新。
    ★  可以直接发贴、回复帖子★  采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录! 
    ★  支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名  ●  
         可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
    Http://www.ChinaOK.net/csdn/csdn.rar
    Http://www.ChinaOK.net/csdn/csdn.exe    [自解压]
      

  4.   

    我是用bool型声明的数组,
    这种类型传0或1是否就相当于一个比特呢?
      

  5.   

    回复: super_xxx() 
    每个字节加四个校验位
    故 每个全角字24bit
      

  6.   

    我记得串行口通信传送的数据位可为7或8位(初始化时设定),而每个全角字有24位,因此至少需要传送3次。你的这个问题可以归结到传送二进制数据还是ASCII码?一般地,在编写串行口通信程序时,常用到MSCOM这一控件。而MSCOM在传送二进制数据时挺麻烦的,我建议如果你编写的程序是运行于WINDOWS 98下,你可以试试采用在VC中嵌入汇编的方法来传送二进制数据。比如你传送一个“中”字有24位,我们把她分3个8位,分别存放在数组中。现假设“中”字对应的24位依次是0x35、0x13、0x51,而且你是用COM1口传送数据:
        unsigned char  datatosend[3]={0x35,0x13,0x51};
                                              //要传送的三组8位二进制数据
        for(int i=0;i<3;i++)
        {
          __asm{
                  mov  dx,3f8h     ;3f8h位COM1口的端口地址
                  mov  al,datatosend[i]
                  out  dx,al
                }
         //延迟一定时间
         … …
         }
       这样你依次接收到的就是 0x35,0x13,0x51。随后你便可以进行处理了…
      

  7.   

    有点眉目了,
    定义一个一维BYTE数组,把bool数组中的 01 按八对一存入BYTE数组中
    大概可以吧