菜鸟求指教MFV VC++6.0:代码一样,编译无错但运行之后没达到预期效果、成员变量“.(点)”后没出现成员函数、代码中几个问题

asdjy123 2012-09-17 07:16:22
我是根据《Visual.C.TurboC串口通信编程实践(第2版)》的7.3节的CRC校验码计算的简单测试程序,按照书上一步步做,最后又和源代码句句对照,搞了一下午编译运行成功了,但点击“计算校验码”按钮但没生成校验码,又按F10一步步对照也没搞定,都已经第二个了!郁闷啊! 单步调试我觉得有问题的地方以用大红表示

.cpp中全部的成员变量“.”后没有成员函数,我关闭再删掉.ncb文件也没有,但我运行配套代码能达到预期效果和也能跳出成员函数等

还有我看代码中几个不懂的地方,我以用红色和???表示

请大家多多教下我这菜鸟,要工程我也会打包给您!!谢谢各位

.cpp代码:

void CCRCProgramDlg::OnButtonGetcrc()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE); //得到编辑框中输入的十六进制数据段

char data[512];


//断点单步从下面开始变量就没变化了,好像是Str2Hex(m_strEditRawdata,data)没进去不知怎么回事 int len=Str2Hex(m_strEditRawdata,data);//将编辑框中的十六进制数据段读入
unsigned char *ptemp=(unsigned char*)((LPCTSTR)data);
unsigned short cc=CreateCRC(ptemp,len);//调用计算校验函数

unsigned short hightbit =cc/256;//计算校验码的高字节
unsigned short lowbit = cc-hightbit*256;//计算校验码的低字节

if(hightbit == 0 && hightbit ==0 && m_strEditRawdata.GetLength() == 0)
{ //???????上面一行的其中一个hightbit要改成lowbit吗?
//如果没有输入校验数据,则不输出结果
m_strEditCRCResult.Empty();
}
CString strHightBit;
strHightBit.Format("%02x",hightbit);

CString strLowBit;
strLowBit.Format("%02x",lowbit);

//显示时低字节在前,高字节在后
m_strEditCRCResult = strLowBit + ' ' + strHightBit;
if ((hightbit == 0 && lowbit == 0 )|| m_strEditRawdata.GetLength() == 0 )
{
m_strEditCRCResult.Empty();
}
UpdateData(false);//?????这干嘛用?与true有什么区别?}



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


//

#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 *RawData,unsigned int Len )
{
/*
RawData 为需要转换的原始数据
Len 为数组的长度
程序的返回值uCrc16为原始数据的校验码
*/
unsigned short uCrc16;
unsigned char abData[2];
uCrc16 = 0;
abData[0] = 0;
while (Len--)
{
abData[1] = abData[0];
abData[0] = *RawData++;
if(uCrc16 & 0x8000)
{
uCrc16 = (uCrc16 & 0x7fff) << 1;
uCrc16 ^= CRC16_GEN_POL;
}
else
{
uCrc16 <<=1;
}
uCrc16 ^= MKSHORT (abData[0] , abData[1]);
}
return(uCrc16);
}


//将字符串数据转换为十六进制数,并储存在data[]数组中,同时返回字符串的长度值
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];//?????str不是字符串吗可以用数组? 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;//?????rlen不是等于rlen?
}

//?????下面这个函数有什么用?为什么分3个循环?最好能具体点char CCRCProgramDlg::HexChar(char c)
{
if((c>='A')&&(c<='F'))
return c-0x30;
else if((c>='a')&&(c<='f'))
return c-'a'+10;
else
return 0x10;
}

void CCRCProgramDlg::OnButtonCleardata()
{
//清空数据
// TODO: Add your control notification handler code here
m_strEditCRCResult.Empty();
m_strEditRawdata.Empty();
UpdateData(FALSE);
}

...全文
167 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
q308865427 2012-09-17
  • 打赏
  • 举报
回复
UpdateData TRUE or FALSE ,就相当于是 TRUE 从控件中下载数据,false 是上传到控件,
asdjy123 2012-09-17
  • 打赏
  • 举报
回复
还有为什么变量“.”点不出来成员函数

//断点单步从下面开始变量就没变化了,好像是Str2Hex(m_strEditRawdata,data)没进去不知怎么回事 int len=Str2Hex(m_strEditRawdata,data);//将编辑框中的十六进制数据段读入为什么单步这里时显示没存进data[512]里啊
asdjy123 2012-09-17
  • 打赏
  • 举报
回复
?rlen不是等于rlen?

不好意思写错了应该是rlen不是等于len?
  • 打赏
  • 举报
回复
1.hightbit == 0 && hightbit ==0 不应该有重复的代码
2.UpdateData(false); 将控件变量显示出来
3.str[i] 运算符重载 类似str.GetAt(i)
4.rlen不是等于rlen 啥意思?
5.0x30表示字符0
傻X 2012-09-17
  • 打赏
  • 举报
回复
1.高位低位都要修改

2.TRUE, 绑定控件到绑定变量之中
FALSE,绑定变量到绑定控见之中

3.可用数组

4.返回rlen没错, ?????rlen不是等于rlen? 看不懂

5.判断输出16进制啊,A-F,a-f 超出范围直接进位

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧