串口发送16进制数据问题 你是说1可以发,f不可以吗?你怎么知道f不可以的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我也发现这个有问题,高手看一下这段程序,那里有问题 发上一段我写的程序,仅供参考//手动以十六进制发送void CPCTestADlg::OnButtonManualTx() { char seps[] = " ,\t\n"; char *token; char str[256]; unsigned char strTx[256]; int i; //获取对话框中发送区数据 UpdateData(true); strcpy(str,(LPCTSTR)m_strTxContents); for(i=0;i<strlen(str);i++) if(!isRightData(str[i],16)) { MessageBox("发送字符必须是0123456789aAbBcCdDeEfF,且每个字节以空格或逗号分隔"); return; } i=0; token = strtok( str, seps ); while( token != NULL ) { strTx[i]=(unsigned char)StrToData(token,16); /* Get next token: */ token = strtok( NULL, seps ); i++; } if(mCnComm.IsOpen()) { mCnComm.Write(strTx,i); } //置位发送计数器 m_commTxCounts+=i; UpdateData(false);}bool CPCTestADlg::isRightData(char c, int jz){ if((jz<2)||(jz>16)) return false; char ch[]="00112233445566778899aAbBcCdDeEfF ,"; int i=0; for(i=0;i<jz+1;i++) { if(c==ch[i*2])return true; if(c==ch[i*2+1])return true; } return false;}long CPCTestADlg::StrToData(CString strData, int jz){ int l=strData.GetLength(); long IntValue=0; int bitValue; int i; for(i=0;i<l;i++) { if(isRightData(strData[i],jz)) { if(isdigit(strData[i])) bitValue=strData[i]-0x30; else { switch(strData[i]) { case 'a': bitValue=0x0a; break; case 'b': bitValue=0x0b; break; case 'c': bitValue=0x0c; break; case 'd': bitValue=0x0d; break; case 'e': bitValue=0x0e; break; case 'f': bitValue=0x0f; break; case 'A': bitValue=0x0a; break; case 'B': bitValue=0x0b; break; case 'C': bitValue=0x0c; break; case 'D': bitValue=0x0d; break; case 'E': bitValue=0x0e; break; case 'F': bitValue=0x0f; break; } } IntValue=bitValue*npf(jz,l-i-1)+IntValue; } else return -1; } return IntValue;} 单步调试一下,在发f时出现什么提示! const CString& operator =( LPCWSTR lpsz )是什么意思呢? 全局变量或函数会更耗资源吗? 理由呢? 想监视打印机的状态,类似于系统自带的'打印机和传真',如果没纸,上面会显示缺纸了,等等,看了N多方法,如使用GetPrinter等等,都不行~ 请教高手在多线程下使用IMediaDet接口的问题 各位高手,请进来看一看这个Edit问题 急死我了! 深圳国电南思 怎么样 模态对话框打开浏览不能删除文件 如何让对话框返回一个值? 请问用ATL做的DLL怎么在一个接口的方法里显示一个对话框? 为什么重载失败? 询问串口问题(接收不到数据) 图象识别项目-找人合作
void CPCTestADlg::OnButtonManualTx()
{
char seps[] = " ,\t\n";
char *token;
char str[256];
unsigned char strTx[256];
int i;
//获取对话框中发送区数据
UpdateData(true);
strcpy(str,(LPCTSTR)m_strTxContents);
for(i=0;i<strlen(str);i++)
if(!isRightData(str[i],16))
{
MessageBox("发送字符必须是0123456789aAbBcCdDeEfF,且每个字节以空格或逗号分隔");
return;
}
i=0;
token = strtok( str, seps );
while( token != NULL )
{
strTx[i]=(unsigned char)StrToData(token,16);
/* Get next token: */
token = strtok( NULL, seps );
i++;
}
if(mCnComm.IsOpen())
{
mCnComm.Write(strTx,i);
}
//置位发送计数器
m_commTxCounts+=i;
UpdateData(false);
}
bool CPCTestADlg::isRightData(char c, int jz)
{
if((jz<2)||(jz>16))
return false;
char ch[]="00112233445566778899aAbBcCdDeEfF ,";
int i=0;
for(i=0;i<jz+1;i++)
{
if(c==ch[i*2])return true;
if(c==ch[i*2+1])return true;
}
return false;
}
long CPCTestADlg::StrToData(CString strData, int jz)
{
int l=strData.GetLength();
long IntValue=0;
int bitValue;
int i;
for(i=0;i<l;i++)
{
if(isRightData(strData[i],jz))
{
if(isdigit(strData[i]))
bitValue=strData[i]-0x30;
else
{
switch(strData[i])
{
case 'a':
bitValue=0x0a;
break;
case 'b':
bitValue=0x0b;
break;
case 'c':
bitValue=0x0c;
break;
case 'd':
bitValue=0x0d;
break;
case 'e':
bitValue=0x0e;
break;
case 'f':
bitValue=0x0f;
break;
case 'A':
bitValue=0x0a;
break;
case 'B':
bitValue=0x0b;
break;
case 'C':
bitValue=0x0c;
break;
case 'D':
bitValue=0x0d;
break;
case 'E':
bitValue=0x0e;
break;
case 'F':
bitValue=0x0f;
break;
}
}
IntValue=bitValue*npf(jz,l-i-1)+IntValue;
}
else
return -1;
}
return IntValue;
}