求高手帮忙分析

wudeshou82666 2009-12-08 04:02:00
代码:
char precv[14] = {0};
int ret = recv(((CHkmApp*)AfxGetApp())->m_Galobalsock,precv,14,0);
if((ret>0)&&(precv[0]==0x68)&&(precv[7]==0x68)&&(precv[8]==0x81))
{

}这样的一段代码
定义接收缓冲区precv,
现在的情况是能够接收到14个字节的东西,但是缓冲区收到的第九个字节内容是错误的,发送的是0xC1,而收到的为-63. 其他的13个字节为正常接收.

为什么会出现这种情况.高手帮忙分析下原因.折腾得我很郁闷
万分感谢


...全文
47 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wudeshou82666 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hbxtlhx 的回复:]
UCHAR c=0xc1;

BYTE c=0xc1;
结果都是193(十进制,十六进制的0xc1)


char c=0xc1;
结果是c为-63,按有符号数处理了,实际上也是0xc1的无符号数据,不过你看起来不像。

0xc1的二进制为 11000001
[/Quote]

楼上的
谢谢了
就是你说的原因了呵呵
C1的最高位没发定义

哈哈
谢谢
北京的雾霾天 2009-12-08
  • 打赏
  • 举报
回复
UCHAR c=0xc1;

BYTE c=0xc1;
结果都是193(十进制,十六进制的0xc1)


char c=0xc1;
结果是c为-63,按有符号数处理了,实际上也是0xc1的无符号数据,不过你看起来不像。

0xc1的二进制为 11000001
北京的雾霾天 2009-12-08
  • 打赏
  • 举报
回复
0xC1对于char来说太大了,你可以通过如下的代码查看结果:


char c=0xc1;


也就是说你的接收程序是没有问题的,问题出在了你定义的数组类型上了,你可以使用BYTE类型,也可以UCHAR类型就可以了。比如:

BYTE precv[14] = {0};
int ret = recv(((CHkmApp*)AfxGetApp())->m_Galobalsock,precv,14,0);
if((ret>0)&&(precv[0]==0x68)&&(precv[7]==0x68)&&(precv[8]==0x81))
{


tan625747 2009-12-08
  • 打赏
  • 举报
回复
查看你发送的第9个字节是什么样的?

memset(precv,0,sizeof(precv));
试试

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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