请教数据类型转换的问题

jasonyang1005 2011-01-11 09:52:06
大家好!我想将单片机发过来的16进位的温度值通过串口发到用C++builder写的软件,再转换成十进制显示在RichEdit上,例如,温度是85度,单片机以十六进制发过来的值是0X55;我想在RichEdit上显示85.应该怎么做?我的串口是用API做的,现在是用ASPM虚拟串口和一个串口调试助手软件通过串口互连的方法调试.因为我的程序也是参考别人的,接收到的数据他定义为AnsiString类型,所以当我发0X55,在RichEdit显示是U.同时我也想在Tchart显示温度曲线,但Tchart是认double类型的,所以只要将接收到的温渡值转成INT类型估计就没有问题了.希望大家能回答的详细点,因为我是初学者,之前一直在写单片机程序.2011年能不能加薪就看这次了,哈哈,谢谢各位!
...全文
134 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanzhihua198612 2011-06-10
  • 打赏
  • 举报
回复
LRESULT __fastcall TForm1::OnComRecv(TMessage &msg)
是怎么回事 ?
jasonyang1005 2011-01-17
  • 打赏
  • 举报
回复
谢谢大家!
heyatao 2011-01-13
  • 打赏
  • 举报
回复
先看看你的错误出现在哪一行,定位到。

从串口读回来的数据如果想显示成ASCII码就 char(buff[i])

draculamx 2011-01-13
  • 打赏
  • 举报
回复
上面的代码,我试过了,可以的,如果你一次接收多个字节,稍作修改就行了
draculamx 2011-01-13
  • 打赏
  • 举报
回复
你每次只接收一个字节吗???

如果是的话,只需要这样改:


//----------------------这一段是串口接收的.
static double RX_Data;//这个变量是用来在TCHART画曲线的,
AnsiString str; //接收到的数据 AnsiString类型
unsigned char *kk; //这里改一下
unsigned char buf[255];
LRESULT __fastcall TForm1::OnComRecv(TMessage &msg)
{
str= com1.ReadString(buf, 255);//接收数据
kk=str.c_str()//将收到的数据转为INT类型 修改
RichEdit1->Clear(); //RichEdit清屏
RichEdit1->Text=IntToStr(*kk); //在RichEdit中显示
RX_Data=*kk; //修改
return 0;
}



tst1255 2011-01-12
  • 打赏
  • 举报
回复
5楼和6楼回答综合一下:
数据应该在buff里,如果确认发来的温度数据是用一个字节表示的,转换成整型很简单:
int temp = (int )buff[0]; // 第1个数据转换成整型,如果一次收到多个字节,就一个一个转换吧.
zzbinfo 2011-01-11
  • 打赏
  • 举报
回复
你的接收部分有问题, str= com1.ReadString(buf, 255);//接收数据
你的接收数据应该是放在buf里面的
jasonyang1005 2011-01-11
  • 打赏
  • 举报
回复
//----------------------这一段是串口接收的.
static double RX_Data;//这个变量是用来在TCHART画曲线的,
AnsiString str; //接收到的数据 AnsiString类型
unsigned char kk;
unsigned char buf[255];
LRESULT __fastcall TForm1::OnComRecv(TMessage &msg)
{
str= com1.ReadString(buf, 255);//接收数据
kk=StrToInt(str); //将收到的数据转为INT类型
RichEdit1->Clear(); //RichEdit清屏
RichEdit1->Text=str; //在RichEdit中显示
RX_Data=kk;
return 0;
}
//-----------------------------------这一段是定时器, 1秒钟执行一次
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
char str[2];
str[0]=0x55;
str[1]='\0';
if(B_MsCommOpen==1)
{
com1.Write(str);//每1秒向串口调试助手软件发0x55,以HEX显示是55,没有错.
Chart1->Show();
Series1->Add(RX_Data,"", clRed );}//画曲线.
}

但是,一旦串口调试助手向我写的C++软件以十六进制发55.就弹出一个这样的窗口.

Project Project2.exe raised exception calss Econver Error with message "U is not a valid integer value" Process stopped. use step or Run to continue.

message 的U 和0X55是有关系.

zzbinfo 2011-01-11
  • 打赏
  • 举报
回复
你接收到的怎么会是AnsiString呢,应该是Byte数组吧,哎就是一个一个的字节
jasonyang1005 2011-01-11
  • 打赏
  • 举报
回复
但是接收到的数据是AnsiString类型了.
zzbinfo 2011-01-11
  • 打赏
  • 举报
回复
用IntToStr转换一下再显示
bigfog 2011-01-11
  • 打赏
  • 举报
回复
0x55 asc码是 'U'

RX_Data=(double)kk;//强制转一下

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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