怎么把从串口读到的数据放到字符串类型的 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就再也不会增长了
字符串就读到此为止!

怎么办?
...全文
23 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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 ) ;
回复
相关推荐
发帖
茶馆
创建于2007-08-02

529

社区成员

C++ Builder 茶馆
申请成为版主
帖子事件
创建了帖子
2003-12-24 02:10
社区公告
暂无公告