怎么把从串口读到的数据放到字符串类型的 str_all 中?

wangzhemeng 2003-12-24 02:10:55
目标:把从串口读到的数据放到字符串类型的 str_all 中;
我在程序中是这样写的:
Byte in[128];
char str_test
AnsiString str_all;
...
nNumberOfBytesToRead=128;
ReadFile(Rd_232,in,nNumberOfBytesToRead,&lpNumberOfBytesRead,NULL);
for(int i=0;i<lpNumberOfBytesRead;i++)
{ str_test = in[i];
str_all = str_all + str_test ;
}

问题:一旦in[i]出现‘0x00’,那么str_test=‘\0’, str_all就再也不会增长了
字符串就读到此为止!

怎么办?
...全文
66 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangguo_god 2003-12-24
  • 打赏
  • 举报
回复
ReadFile(Rd_232,in,nNumberOfBytesToRead,&lpNumberOfBytesRead,NULL);
for(int i=0;i<lpNumberOfBytesRead;i++)
{ str_test = in[i];
if(str_test)
str_all = str_all + str_test ;
else
str_all = str_all + " ";
}


另楼上:串口数据是二进制发送的,你要显示成16进制必须自己控制
wangzhemeng 2003-12-24
  • 打赏
  • 举报
回复
怎样设置才能使从串口中读到的数据是十六进制而不是ASCII码?
fathappy 2003-12-24
  • 打赏
  • 举报
回复
楼上的大侠,在判断后,str_all会不会收不到0x00?如果发的是0x85 0x00 0x80,中间的0x00就收不到了。
我觉得可以按收到的长度来循环。
yangguo_god 2003-12-24
  • 打赏
  • 举报
回复
ReadFile(Rd_232,in,nNumberOfBytesToRead,&lpNumberOfBytesRead,NULL);
for(int i=0;i<lpNumberOfBytesRead;i++)
{ str_test = in[i];
if(str_test)
str_all = str_all + str_test ;
}

wangzhemeng 2003-12-24
  • 打赏
  • 举报
回复
chifengwatch:你的好象不行,我试了!

songhtao:我程序运行到 str_all[i + 1] = in[i] ; 就死了,
是不是由于 AnsiString str_all;

先谢谢了!
我不懂电脑 2003-12-24
  • 打赏
  • 举报
回复
for(int i=0;i<lpNumberOfBytesRead;i++)
{
str_all[i + 1] = in[i] ;
}
chifengwatch 2003-12-24
  • 打赏
  • 举报
回复
检查是否是\0,替换它
chifengwatch 2003-12-24
  • 打赏
  • 举报
回复
ReadFile( hComm , inbuff , cs.cbInQue , &nBytesRead , NULL ); // 接收COM 的数据

String Temp = "";
// 转移数据到变量中
inbuff[cs.cbInQue]= '\0';
for ( unsigned long i = 0 ; i <= cs.cbInQue ; i++ )
{
Temp += char(inbuff[i]);
}
frm_main->Memo1->Lines->Add( Temp ) ;

552

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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