• 西安外事学院在省茶艺大赛中创多项佳绩西安外事学院-陕西教育新闻 2019-10-25
  • 人民网评:让军人成为全社会最尊崇的职业 2019-10-17
  • 新规:续航150公里以下新能源车取消补贴 2019-10-11
  • 法国革命时代,女人流行穿什么 2019-10-11
  • 黑龙江省县(市、区)委统战部长培训班举办 2019-10-06
  • “夏季第一瓜”竟是它! 2019-10-06
  • 《阿古顿巴》藏语版在藏语卫视首播 2019-09-06
  • 晋中市“三同步”推动互联网治理创新 2019-08-27
  • 法媒:研究称美国人常用药物或增加抑郁风险 2019-08-27
  • 宝贝是地名,你能想到这么浪漫的地名在哪儿吗? 2019-08-15
  • 何树山副省长到方圆机电调研指导工作 2019-08-15
  • 75秒赛车推算:初学者求部分代码解析(C++ MFC)10进制转16进制、CRC-16校验

    来源:本网整理
    菜鸟求部分代码解析(C++ MFC)10进制转16进制、CRC-16校验
    求高手帮我解读下一些代码,看了几遍也有的地方没明白。不知之处以用红字标志,请各位帮我讲的仔细点!谢谢高手!


    void CCRCProgramDlg::OnButtonGetcrc() 
    {
    // TODO: Add your control notification handler code here
    UpdateData(TRUE);

    char data[512];
    int len=Str2Hex(m_strEditRawdata,data);
    unsigned char *ptemp=(unsigned char*)((LPCTSTR)data);
    unsigned short cc=CreateCRC(ptemp,len);
      1 下面两句求解析
    unsigned short hightbit=cc/256;
    unsigned short lowbit = cc-hightbit*256;

    if (hightbit == 0 && hightbit == 0 && m_strEditRawdata.GetLength() == 0 ) 
    {
    m_strEditCRCResult.Empty();
    }

    CString strHighBit;
    strHighBit.Format("%02x",hightbit);

    CString strLowBit;
    strLowBit.Format("%02x",lowbit);
     
    m_strEditCRCResult = strLowBit + ' ' + strHighBit;

    if ((hightbit == 0 &&lowbit == 0 )|| m_strEditRawdata.GetLength() == 0 ) 
    {
    m_strEditCRCResult.Empty();
    }
    UpdateData(false);


    }


    //---------------------下面为校验码处理函数-----------------------

    #define CRC16_GEN_POL 0x8005
    #define MKSHORT(a,b) ((unsigned short) (a) | ((unsigned short)(b) << 8))
    /* ::---------------------------------
    :: FN: CreateCRC; CRC in ANSI - C
    :: Synopsis: static void CreateCRC(BYTE *CommData,WORD uLen)
    :: Function: formation of the CRC16 checksum.
    ------------------------------------*/
    unsigned short CCRCProgramDlg::CreateCRC(unsigned char *CommData, unsigned int uLen )

    {
    unsigned short uCrc16;
    unsigned char abData[2];
    uCrc16 = 0;
    abData[0] = 0;

    if(uLen==0)
    return(uCrc16);
    else
    {
    while (uLen-- )
    {
    abData[1] = abData[0];
    abData[0] = *CommData++;
    if(uCrc16 & 0x8000) //2条件语句为什么是这样
    {
    uCrc16 = (uCrc16 & 0x7fff) << 1;
    uCrc16 ^= CRC16_GEN_POL;
    }
    else
    {
    uCrc16 <<= 1;
    }
    3 下面一句求解析,MKSHORT是什么函数啊,网上没找到
    uCrc16 ^= MKSHORT (abData[0] , abData[1]);
      }

    // uCrc16 = 0;
    return(uCrc16);
    }
    }


    int CCRCProgramDlg::Str2Hex(CString str, char* data)
    {
    int t,t1;
    int rlen=0,len=str.GetLength();
    //data.SetSize(len/2);
    for(int i=0;i<len;)
    {
    char l,h=str[i];
    if(h==' ')
    {
    i++;
    continue;
    }
    i++;
    if(i>=len)
    break;
    l=str[i];
    t=HexChar(h);
    t1=HexChar(l);
    if((t==16)||(t1==16))
    break;
    else 
    t=t*16+t1;
    i++;
    data[rlen]=(char)t;
    rlen++;
    }
    return rlen;

    }

      4 下面求一句句注释
    char CCRCProgramDlg::HexChar(char c)//转换成16进制
    {
    if((c>='0')&&(c<='9'))//进位
    return c-0x30;//0x30等于0??为什么
    else if((c>='A')&&(c<='F'))
    return c-'A'+10;
    else if((c>='a')&&(c<='f'))
    return c-'a'+10;
    else
    return 0x10;
    }

    ------解决方案--------------------
    unsigned short hightbit=cc/256;//高8位
    unsigned short lowbit = cc-hightbit*256;//低8位

    if(uCrc16 & 0x8000)//位与判高位为1否

    ------解决方案--------------------
    校验 无法判断吧
    ------解决方案--------------------
    1、short 型0xffff,16位 1楼的朋友说了,是获取高8位与低8位的作用;
    2、那么相应的,就是高位1的判断了
    3、会不会是自定义函数,按照字面意思,似乎是make short ,将传入的值,转成16位数返回出来,因为本身char 是8位,然后组合移位下,就可以组成16位了,而且按照定义,crc也是short型,正好匹配;
    4、是将输入的16进制数转成10进制数,如将0x1f转成31,将其转换过来;0x30是ASCII表中的位置,正好是数字0,下面2个判断,则是将字母转成数字,按照16进制转换,这个要看计算机基础了,忘记了可以回顾下,就知道什么意思,最后return 0x10,好像是空格还是其他什么吧,可以去查下ascii表,一般在c语言课本后面都有这个附录 c_a_3();
    可能还有不对的地方,其他路过的人看到了顺便提点下吧

    彩票双色球历史开奖结果 www.s9h6.com

  • 本文相关:
  • 请问一个HTML的小白有关问题
  • 达众人, 怎样用MFC开发windows service(系统服务)程序
  • 163通行证注册的POST有关问题
  • 小弟我想用程序来判断汽车档位的变换,怎么做呢
  • 各位,小弟我想学习WINDOWS的文件驱动开发,应该学习那些知识!多谢奥
  • win32串口通讯,WriteFile一直会阻塞
  • VC调用MATLBA的DLL文件绘图,显示不全的有关问题
  • 大家伙儿帮忙!用API实现用指定的颜色填充替换掉某区域的指定颜色
  • !OpenGL纹理显示有关问题【新手】
  • GetDC()函数截图有关问题
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 彩票双色球历史开奖结果 - 频道导航
    Copyright © 2017 彩票双色球历史开奖结果 www.s9h6.com All Rights Reserved
  • 西安外事学院在省茶艺大赛中创多项佳绩西安外事学院-陕西教育新闻 2019-10-25
  • 人民网评:让军人成为全社会最尊崇的职业 2019-10-17
  • 新规:续航150公里以下新能源车取消补贴 2019-10-11
  • 法国革命时代,女人流行穿什么 2019-10-11
  • 黑龙江省县(市、区)委统战部长培训班举办 2019-10-06
  • “夏季第一瓜”竟是它! 2019-10-06
  • 《阿古顿巴》藏语版在藏语卫视首播 2019-09-06
  • 晋中市“三同步”推动互联网治理创新 2019-08-27
  • 法媒:研究称美国人常用药物或增加抑郁风险 2019-08-27
  • 宝贝是地名,你能想到这么浪漫的地名在哪儿吗? 2019-08-15
  • 何树山副省长到方圆机电调研指导工作 2019-08-15
  • 吉林11选5怎么玩 上海体彩网 456欢乐五张梭哈技巧 大赢家彩票网新11选5 22选5大星彩票走势图百度 老11选5开奖查询 双色球最准确预测100% 南粤36选7基本走势图 排列三试机号近10 江苏快三其本走势一定牛 游艇会首页 2019晋江世界沙滩排球巡回赛 炸金花翻倍 彩票号码查询 双色球红球定位筛选