社区
ATL
帖子详情
[求助] 串口API读取出数据,但memcpy后就不对了
chenjelly
2011-01-14 03:46:27
在程序中,用串口API接收数据,能正确读取出数据,但用memcpy把接收到的BYTE类型的数据recvbuff拷贝到另一个BYTE变量pBuff中后,pBuff中的数据不对了
查了一天多,目前仍未找出问题所在,求高手帮忙
拷贝部分的代码如下:
BYTE *pBuff = new BYTE[wCount+1];
memset(pBuff,'\0',wCount+1);
memcpy(pBuff,recvbuff,wCount+1);
...全文
213
22
打赏
收藏
[求助] 串口API读取出数据,但memcpy后就不对了
在程序中,用串口API接收数据,能正确读取出数据,但用memcpy把接收到的BYTE类型的数据recvbuff拷贝到另一个BYTE变量pBuff中后,pBuff中的数据不对了 查了一天多,目前仍未找出问题所在,求高手帮忙 拷贝部分的代码如下: BYTE *pBuff = new BYTE[wCount+1]; memset(pBuff,'\0',wCount+1); memcpy(pBuff,recvbuff,wCount+1);
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
huang_gen
2011-01-16
打赏
举报
回复
memcpy(pBuff,recvbuff,wCount+1);改为
memcpy(pBuff,recvbuff,wCount);试试,可能是recvbuff中的内容太多,导致pBuff没有结束字符,也有可能是你的recvbuff没有结束字符
野男孩
2011-01-14
打赏
举报
回复
嗯,知道问题了就好。二进制数据不要动不动就转换成字符串
zhourenyun
2011-01-14
打赏
举报
回复
由于 陈庆 的隐私设置,你不能访问当前内容
=======
!!
covsno
2011-01-14
打赏
举报
回复
BYTE *pBuff = new BYTE[wCount+1];
memset(pBuff,'\0',wCount+1);
memcpy(pBuff,recvbuff,wCount+1);///字符串结束符也要占位置的
chenjelly
2011-01-14
打赏
举报
回复
用str.Format("%02X ",recvbuff[i]);//(我要实现的是16进制显示)BYTE 转换成CString,这种方式对不
手机写程序
2011-01-14
打赏
举报
回复
[Quote=引用 11 楼 chenjelly 的回复:]
引用 9 楼 tttk 的回复:
地址不能访问。
由于 陈庆 的隐私设置,你不能访问当前内容
好幽默的人哦
呵呵……谢谢
[/Quote]
一点都不幽默,是真不能访问.
zhou1xp
2011-01-14
打赏
举报
回复
你是用的UNICODE字符么,你转CString的时候变成UNICODE了
验证码识别
2011-01-14
打赏
举报
回复
没发现代码有什么问题
chenjelly
2011-01-14
打赏
举报
回复
[Quote=引用 13 楼 happyparrot 的回复:]
应该是BYTE数组中包含有0x00字符,转换成CString是不行的,0x00后的会自动被截掉。
[/Quote]
我不知道原因是什么?因为在接收的线程中,将recvbuff(一个BYTE数组)转换成CString后,显示的内容是对的,但在主线程中,对于传递回的BYTE指针,用相同的方法时,不仅遇到0x00不会显示,而且能显示的个数很少……
快乐鹦鹉
2011-01-14
打赏
举报
回复
应该是BYTE数组中包含有0x00字符,转换成CString是不行的,0x00后的会自动被截掉。
chenjelly
2011-01-14
打赏
举报
回复
[Quote=引用 5 楼 covsno 的回复:]
我估计楼主最后把它转成字符串了
[/Quote]
被您说中了……就是在转换过程中,显示得不对,但是内存中的数据是对的
以前也是这种方法读取API,能够接收成功,并能解析处理再入库
可能出现的问题的是地方是:BYTE转换成CString的问题,目前没有明白道理
呵呵……谢谢大家的帮助……
chenjelly
2011-01-14
打赏
举报
回复
[Quote=引用 9 楼 tttk 的回复:]
地址不能访问。
由于 陈庆 的隐私设置,你不能访问当前内容
[/Quote]
好幽默的人哦
呵呵……谢谢
tttk
2011-01-14
打赏
举报
回复
内存拷贝后,如果调试显示结果一致,问题可能出在多线程上,memcpy这种非常底层的函数,一般不会出错。
tttk
2011-01-14
打赏
举报
回复
地址不能访问。
由于 陈庆 的隐私设置,你不能访问当前内容
chenjelly
2011-01-14
打赏
举报
回复
http://hi.csdn.net/space-417397-do-album-picid-727154-goto-up.html
http://hi.csdn.net/space-417397-do-album-picid-727158-goto-down.html
这两张是调试时抓的图
chenjelly
2011-01-14
打赏
举报
回复
chenjelly
2011-01-14
打赏
举报
回复
[Quote=引用 2 楼 happyparrot 的回复:]
memcpy(pBuff,recvbuff,wCount+1);
应该是memcpy(pBuff,recvbuff,wCount);吧,你是直接看pBuff的值不对吗?那么memcpy时,recvbuff的值正确吗?代码能再全一点吗
[/Quote]
recvbuff接收的数据是正确的,(在一个UI线程中实现串口API接收和发送数据的)
调试的时候,发现pBuff的内存数据也是改变了的,
但是我把通过消息数据传回主线程的时候,得到的数据,查看内存是对了,但显示,解析就与UI线程中的显示不一样,主线程中只能 显示一部分
covsno
2011-01-14
打赏
举报
回复
我估计楼主最后把它转成字符串了
frankyhit
2011-01-14
打赏
举报
回复
估计你是哪个地方越界了。
varding
2011-01-14
打赏
举报
回复
[Quote=引用楼主 chenjelly 的回复:]
在程序中,用串口API接收数据,能正确读取出数据,但用memcpy把接收到的BYTE类型的数据recvbuff拷贝到另一个BYTE变量pBuff中后,pBuff中的数据不对了
查了一天多,目前仍未找出问题所在,求高手帮忙
拷贝部分的代码如下:
BYTE *pBuff = new BYTE[wCount+1];
memset(pBuff,'\0',wCount+1……
[/Quote]
没看出啥问题
代码多贴点
加载更多回复(2)
关于
memcpy
在循环里只写入一部分
数据
的问题
在写小功能的时候,使用
memcpy
API
的时候,
出
现了在循环中,只写入了第一行的
数据
其他都没有写入 的BUG。如: 循环里 没有写入,但像注释掉的那样学就能写入。这是为什么呢 一开始,以为是对
memcpy
用法理解错误。就去查了下,
API
说明。 void *
memcpy
(void *str1, const void *str2, size_t n) 第一个参数是 需要传的是一个指针。没错呀。这让我一筹莫展。 往往 啥都没问题的 时候 错误可能就
出
现在 最简单的地方。直到我想到了要写入的文件 没错
不同内存对齐方式
memcpy
之后
数据
错误
一.背景:1.使用#pragma定义结构体:RECV_CMD_DATA_t和RECV_CMD_PACK_t,按照1字节进行内存对齐#pragma pack(1) typedef struct recv_cmd_data { int iType; long long llInt; int iLen; ...
C++如何拷贝多份相同大小的
数据
以及拷
出
多份相同大小的
数据
(
memcpy
的用法)
C++
memcpy
函数的用法比较简单,
memcpy
拷贝
数据
的时候,只需要传递拷贝
数据
的指针(4个字节)以及需要拷贝
数据
的大小就可以了。但是如何进行大
数据
的拷贝呢?以及如何拷贝若干份相同的
数据
(例如1000张图像)呢? 1、将若干份图像
数据
拷贝到指定目标中 2、将指定目标中的
数据
读取
出
来,拆分为一张张图像 ...
关于
memcpy
float类型的
数据
关于
memcpy
float类型的
数据
c语言中
memcpy
是字节大小,使用
memcpy
函数时要注意拷贝
数据
的长度
memcpy
函数简介
memcpy
函数是C/C++语言中的一个用于内存复制的函数,声明在 string.h 中(C++是 cstring)。其原型是:void *
memcpy
(void *destin, void *source, unsigned n);作用是:以source指向的地址为起点,将连续的n个字节
数据
,复制到以destin指向的地址为起点的内存中。函数有三个参数,第一个是目标地址,第二...
ATL
3,245
社区成员
48,539
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章