hur.cn - 华软网

 热门搜索

关于消息参数与字符串问题!

  作者:未知    来源:网络    更新时间:2011/9/8
最近做了一个数据采集,使用消息发送前都很正常,但是发送了以后,0xaa字符就变成了0xfffffaa了,这个是咋回事啊?
代码如下:
C++">
//线程消息发送
char buff[1024]={0};
int ret=pDlg->m_Client.ReceiveMsg_CINT(buff);
if(ret==0)
{
for (int i=0;i<1000;i++)
{
          char temp=buff[i];//这个地方数据查看很正常
           ::PostMessage(pInstance,WM_COMM_RXCHAR,(WPARAM)0,(LPARAM)temp);
  }
}


//消息接受部分

LONG CWeightDlg::OnCommunication(WPARAM ch, LPARAM port)
{
try
{
char bt=port;      //字符接受以后就成了0xaa了,其他的如0xed也变成了0xfffffed
AdData[startflag]=bt;
startflag++;
。。。。
}


现在有两个问题,一个是如果向上面的方法一个一个数据的发,如何进行一下修改?
                另外一个就是我能不能直接发一个数组过去?


---华软 网友回答---
首先,发数据就有问题:发1000次? 一个数组就不能一次赋完?
---华软网友回复---
char bt=(char)port;
---华软网友回复---

char temp=buff[i];
改为
long ltemp = buff[i];
---华软网友回复---
引用 1 楼 shunruo 的回复:
首先,发数据就有问题:发1000次? 一个数组就不能一次赋完?


我很想一次发一个数组的,但是从来没做过,不知道怎么发啊!
---华软网友回复---
引用 2 楼 zyc285230318 的回复:
char bt=(char)port;


这样的方法测试过,不行
---华软网友回复---
1.char bt=port; ->  char bt = port & 0xff;
2.直接发送个字符串过去难道不可以么?你这循环很费时间啊
---华软网友回复---
用3楼办法改完以后可以了,目前bt收到的值已经正常了,但是

AdData[startflag]=bt;

现在这里有问题,!

AdData[20] 定义的类型是int型,我修改成DWORD,和long都不行!

一付值完了以后0xaa就变成了0xfffffaa了!
---华软网友回复---
要发堆上的数据,而不是栈上的,原生数据除外
---华软网友回复---
可能是直接传值的原因,上边把char转成了LPARAM,试下传地址或者指针。。

如果是临时变量的话,用SendMessage。。

C++">
::SendMessage(pInstance,WM_COMM_RXCHAR,(WPARAM)&buff, 0);


或者如果用PostMessage的话保证在变量生存期内传到消息就可以。。

接收消息端转换一下类型。。
C++">
char* pData = (char*)ch;

---华软网友回复---
我知道我程序问题出在什么地方了!感谢楼上各位!

char ch=0xaa;
int k=ch;
printf("%c\n",k);

看上面的小程序,K的值为0xffffffaa,应该是转换的问题,我把k的类型修改为long、unsinged long都不行!

如果我想吧ch转换成为10进制的数应该怎么转换?
---华软网友回复---
感谢各位,见者有份!程序已经搞定了!

1、关于出现的0xaa变成0xfffffaa主要原因是在于char 与int之间的转换,  修改为

AdData[startflag]=(unsinged char)bt ;
就行了

2、关于直接发数组,首先必须要用sendMessage!(postmessage也行,但是有一定要求,正在处理中)

然后这样发
       char buff[STRBUFF_LEN];
消息:::SendMesage(pInstance,WM_COMM_RXCHAR,(WPARAM)buff,(LPARAM)0);

接受   char recvBuf[STRBUFF_LEN];
memset(recvBuf, 0, STRBUFF_LEN);
memcpy(recvBuf, (const void *)ch, STRBUFF_LEN);

这样就行了





---华软网友回复---
你用PostMessage也可以,不过要保证buf的数据有效      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。