要进行数据压缩,数据中含有大量10进制数字 想把其中的数字转换为ASCII码 因为数字的ASCII码的高四位是相同的,所以要将其去截掉,留下低四位。
所以问题是数字转换为ASCII码,截掉高四位,留下低四位。 
请大侠帮忙,最好举个例子。不胜感激!

解决方案 »

  1.   

    short i = 1000;
    i &= 0xFF; // 留下低四位
      

  2.   

    看不大明白啊 short 不是两个字节吗 每个数字是1字节也就是8位二进制码 比如说我要把数字8转化位ASCII码并保留其低四位得二进制码 ,用你的方法该怎么写啊
      

  3.   

    char x = 3;
    x&=0xf;低四位
      

  4.   

    为什么我用这种方法截完以后再写入txt文档 大小和以前基本一样呢
    while (fileREAD.ReadString(FileString)!=FALSE)
    {
      if (FileString.Left(1)=="$")//为帧头
      {
      int n=FileString.GetLength();
      int m=0;
      CString strr="",cha="";
      while(m<=n)
      {
                         cha=FileString.Mid(m,1);
         char x;
                         x&=0xff;  
         strr=strr+x;
         m++;
      }
      int p=strr.GetLength();
      m_file.Write(strr,p);
      
      }
    }
                    麻烦再帮我看看啊
      

  5.   

    比原来文件稍微小了一点点 
    while (fileREAD.ReadString(FileString)!=FALSE)
    {
      if (FileString.Left(1)=="$")
      {
      int n=FileString.GetLength();
      int m=0;
      CString strr="",cha="";//cha是逐个读出得字符
      while(m<=n)
      {
                       cha=FileString.Mid(m,1);
       char *x=cha.GetBuffer(1);
    //这个地方将CString转化为char必须是char* 这样的话怎么截取啊!!!!!!!!!!!
                       x&=0xff;  
       strr=strr+x;
       m++;
      }
      int p=strr.GetLength();
      m_file.Write(strr,p);
      
      }
    }
    如果用二进制该怎么写啊 好像用二进制解压的时候就比较麻烦一点了
      

  6.   

    如果不行的话大家帮我看看怎样把相邻的两个数字的ASCII码分别截得低四位后合成一个字节!大家费心帮帮我 谢谢了
      

  7.   

    这个也叫压缩么?如果是数字,每个位都有用的,不可能丢掉4位;如果是字符,把数字字符串当作数值不是更简单,比如“1234”是4个字符(ASCII码4个字节,UNICODE码8个字节),但是用short保存1234就是2个字节。楼主先把你的目的说明白。
      

  8.   

    1234四个字符 它们的ASCII码分别是00110001 00110010 00110011 00110100它们的高四位是相同的 所以去掉 把相邻的1和2的低四位组合到一起就是00010010 3和4的低四位组合到一起就是00110100  是这个意思
      

  9.   

    算法很简单的,就是移位和与或运算:
    #define MAKEaBYTE(low, high) (BYTE)(((BYTE)(low) & 0x0F) | ((BYTE)(high) << 4))
    不过这样要求你的数据只能是数字,并且是固定10进制位数,否则还真不知道如何还原。其实这么做真的没有意义,即使从压缩角度考虑,比如100,你需要1个半字节;但是用数值只有一个字节,当然也是考虑特定环境(数值小于256)。
      

  10.   

    LZ说的是压缩的BCD码吧?不过只能是数字,不能有字母。
    char string[] = "1234"
    BYTE data[2];
    for (int i=0; i<sizeof(str)/2; i++)
        data[i] = (str[i*2]&0xf) + (str[i*2+1]&0xf)*0x10;