关于vc中MFC编写串口的有关问题(初始波特率设置出现的有关问题)

关于vc中MFC编写串口的问题(初始波特率设置出现的问题)
编写一个串口调试工具,用一个变量m_ibaudrate来存放用户所选择的波特率(其中m_ibaudrate通过
m_ibaudrate = GetDlgItemInt(IDC_COMBO_BAUDRATE)已经正确读取到用户选择的波特率)。并把setting设置成
m_COMM.setting("m_ibaudrate,N,8,1")但是一旦这样设置就读取不了串口,改成m_COMM.setting("9600,N,8,1")就能成功的读取串口,这是为什么呢,下面贴出“打开串口”这个按钮的消息处理函数

  CString m_strBaudrate(_T(""));//获取用户选择的波特率
unsigned int m_ibaudrate = 9600; //初始波特率默认为9600

CString m_strp(_T("")); //显示选择串口号信息
CString m_strbt(_T("")); //显示选择的波特率

CString m_strPort(_T("")); //获取用户选择的串口号
int port = 1; //初始串口默认为1


// 获取用户选择的串口号并将它在代码中实现
GetDlgItemText(IDC_COMBO_SERIAL,m_strPort);
if(m_strPort == "COM1")
{
port = 1;
}
if(m_strPort == "COM2")
{
port = 2;
}
if(m_strPort == "COM3")
{
port = 3;
}
if(m_strPort == "COM4")
{
port = 4;
}

m_ibaudrate = GetDlgItemInt(IDC_COMBO_BAUDRATE);//获取用户选择的波特率
   
  if (m_COMM.get_PortOpen())
  {
  m_COMM.put_PortOpen(false);
  }

  m_COMM.put_CommPort(port);
  m_COMM.put_InBufferSize(1024);
  m_COMM.put_OutBufferSize(1024);
  m_COMM.put_Settings(_T("9600,N,8,1"));//此处如果改成m_COMM.setting("m_ibaudrate,N,8,1")就出错
  m_COMM.put_InputMode(1);
  m_COMM.put_RThreshold(1);

  //串口读取后的处理
  if(!m_COMM.get_PortOpen())
{
m_COMM.put_PortOpen(true);
m_strp.Format(_T("串口%d打开成功\n"),port);  
m_strbt.Format(_T("波特率为%d"),m_ibaudrate);
m_strp += m_strbt ;
AfxMessageBox(m_strp);
}
else
{
m_COMM.put_OutBufferCount(0);
AfxMessageBox(_T("串口%d打开失败"));
}

------解决方案--------------------
m_COMM.setting("m_ibaudrate,N,8,1");这样并没有用到m_ibaudrate,仅仅是一个字符串当然不行啦
你这样写
C/C++ code

CString strSetting;
strSetting.Format("%d,N,8,1", m_ibaudrate);
m_COMM.setting(strSetting);

------解决方案--------------------
第一个波特率的问题就是说你把一个概念搞混了

字符和数字虽然看起来是一模一样的,但在内存中存放的形式是完全不同的

比如你这个("9600,N,8,1") 其中的9600

在内存中就是这么存放的 0x57 0x54 0x48 0x48

而("m_ibaudrate,N,8,1")中的m_ibaudrate所保存的数值为9600(十进制)

在内存中是这样放的 0x25 0x80(就是9600的十六进制表示)

而这个setting函数所接收到的第一个参数为字符串

他就会把m_ibaudrate中的9600按字符去理解

也就是↓和P

这样就不是程序所希望接收到的参数了

说的有点杂乱,你要是想不通,大家再帮你分析一下
------解决方案--------------------
字符串中的文本,不是变量。