MFC 字节赋值

cky77 2018-10-31 11:28:13
memcpy(&pDataBusCommand[4],(void *)_ttoi(m_list_busCommand.GetItemText(i,2)),2);

就是要在listcontrol读一个位置的数据,存到数组里。列表控件某个位置读出来的相当于是两个字节的数据,需要放在pData[0]和pData[1]。
请问该怎么做呢?
...全文
142 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
cky77 2018-11-01
  • 打赏
  • 举报
回复
用ntohs()就好了,16位的网络转主机字节序函数
cky77 2018-11-01
  • 打赏
  • 举报
回复
引用 12 楼 schlafenhamster 的回复:
“_ttoi(m_list_busCommand.GetItemText(i,2)”运行时 返回一个临时变量 ,但 不知道 地址 ,所以不行!

“pData[4]=0x22,pData[5]=0x11反过来了”
对于 多个 字节的类型 ,字节顺序 有个 大小 端 的 问题 ,小端 顺序 是 低字节在 低地址 , 你这样 看 是 反的 !

应该
afxDump << pData[1]*256 + pData[0] << "\n";// word 1000 !

另一种 叫 大端 (Apple 机)
little endian(小端) big endian(大端)


嗯嗯,那我是不是只有按字节先逆序,然后在memcpy?
schlafenhamster 2018-11-01
  • 打赏
  • 举报
回复
“_ttoi(m_list_busCommand.GetItemText(i,2)”运行时 返回一个临时变量 ,但 不知道 地址 ,所以不行!

“pData[4]=0x22,pData[5]=0x11反过来了”
对于 多个 字节的类型 ,字节顺序 有个 大小 端 的 问题 ,小端 顺序 是 低字节在 低地址 , 你这样 看 是 反的 !

应该
afxDump << pData[1]*256 + pData[0] << "\n";// word 1000 !

另一种 叫 大端 (Apple 机)
little endian(小端) big endian(大端)
cky77 2018-11-01
  • 打赏
  • 举报
回复
引用 10 楼 schlafenhamster 的回复:
或者
BYTE pData[2];//
WORD wd=atoi("1000");// 0x03E8
memcpy(pData,&wd,sizeof(WORD));
afxDump << pData[1]*256 + pData[0] << "\n";// word 1000 !

memcpy(&pDataBusCommand[4],(void *)_ttoi(m_list_busCommand.GetItemText(i,2)),2);

我这样写问题出在void*,我把
(void *)_ttoi(m_list_busCommand.GetItemText(i,2))这个参数拆开写就好了。建个int变量就能用&了,就没有访问冲突了。
但是有了个新问题,比如GetItemText(i,2)得到的0x1122,经memcpy之后再数组里看pData[4]=0x22,pData[5]=0x11反过来了。。
schlafenhamster 2018-11-01
  • 打赏
  • 举报
回复
VOID SwapShort (PUSHORT p)
{
SHORT temp;

temp =(SHORT)( HIBYTE (*p) + (LOBYTE(*p) << 8));
*p = temp;
}
schlafenhamster 2018-10-31
  • 打赏
  • 举报
回复
或者
BYTE pData[2];//
WORD wd=atoi("1000");// 0x03E8
memcpy(pData,&wd,sizeof(WORD));
afxDump << pData[1]*256 + pData[0] << "\n";// word 1000 !
schlafenhamster 2018-10-31
  • 打赏
  • 举报
回复
参考
WORD pData[1];//
WORD wd=atoi("1000");// 0x03E8
memcpy(pData,&wd,sizeof(WORD));
afxDump << pData[0] << "\n";// word 1000 !
cky77 2018-10-31
  • 打赏
  • 举报
回复
引用 7 楼 weixin_43424867 的回复:
memcpy(&pDataBusCommand[4],(void *)_ttoi(m_list_busCommand.GetItemText(i,2)),2);

你这里的i没赋值啊,_ttoi(m_list_busCommand.GetItemText(i,2)只能得到一个,还有你的pDataBusCommand[4]是什么类型的数组,你这些都不清楚。。。你参考下面这样写吧。

CString s;
s=m_list_busCommand.GetItemText(1,2) //你所需的数在哪行哪列,注意表头不算行。
int temp1= _ttoi(s); //将CString变量转化为int整形变量,如果你需要其他类型,找对应的转化函数就行了
//接下来需要其他的数操作类似,这样说你总懂了吧?

谢谢你的回复。但是对我没什么用。
みしつかん 2018-10-31
  • 打赏
  • 举报
回复
memcpy(&pDataBusCommand[4],(void *)_ttoi(m_list_busCommand.GetItemText(i,2)),2);

你这里的i没赋值啊,_ttoi(m_list_busCommand.GetItemText(i,2)只能得到一个,还有你的pDataBusCommand[4]是什么类型的数组,你这些都不清楚。。。你参考下面这样写吧。

CString s;
s=m_list_busCommand.GetItemText(1,2) //你所需的数在哪行哪列,注意表头不算行。
int temp1= _ttoi(s); //将CString变量转化为int整形变量,如果你需要其他类型,找对应的转化函数就行了
//接下来需要其他的数操作类似,这样说你总懂了吧?
赵4老师 2018-10-31
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
cky77 2018-10-31
  • 打赏
  • 举报
回复
pDataBusCommand我这个数组是new出来的,有关系吗。提示访问冲突
0x0FDF31CA (msvcr120d.dll) (XMLParse.exe 中)处的第一机会异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突。
0x0FDF31CA (msvcr120d.dll) (XMLParse.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突。
cky77 2018-10-31
  • 打赏
  • 举报
回复
引用 2 楼 smwhotjay 的回复:
char temp[21]="";
m_ListCtrl.GetItemText(row,col,temp,21);
AfxMessageBox(temp);

temp[0] temp[1] 就是 pData[0]和pData[1] 细节还要自己修改下

可不可以帮我看下,我写的错在哪。报错访问冲突。。memcpy第二个参数那是不是不能写void *
cky77 2018-10-31
  • 打赏
  • 举报
回复
引用 1 楼 weixin_43424867 的回复:
你这上面不是都有吗?用m_list_busCommand.GetItemText(i,2)取得第几行和列的内容(2个参数代表行和列),它们是CString 类型,然后将其转化为整型(_ttoi)或者你需要的类型就好了啊,转化好后赋值给pData[0]和pData[1]。

我写的这个报错
smwhotjay 2018-10-31
  • 打赏
  • 举报
回复
char temp[21]="";
m_ListCtrl.GetItemText(row,col,temp,21);
AfxMessageBox(temp);

temp[0] temp[1] 就是 pData[0]和pData[1] 细节还要自己修改下
みしつかん 2018-10-31
  • 打赏
  • 举报
回复
你这上面不是都有吗?用m_list_busCommand.GetItemText(i,2)取得第几行和列的内容(2个参数代表行和列),它们是CString 类型,然后将其转化为整型(_ttoi)或者你需要的类型就好了啊,转化好后赋值给pData[0]和pData[1]。
第4章 MFC实用技术 93 4.1 MFC常用宏应用 94 0188 获取32位整数的低字节和高字节数据 94 0189 将两个16位数组合为一个32位数 94 4.2 MFC常用函数 94 0190 MFC常用调试函数 94 0191 判断某个句柄是否关联一个窗口 95 0192 MFC应用程序信息和管理函数 95 0193 Internet URL解析全局函数 95 4.3 MFC框架技术 96 0194 在类的定义时使其具有运行时类型识别的功能 96 0195 运行时判断某个对象是否是指定的类型 96 0196 禁止文档/视图应用程序运行时显示视图选择窗口 96 0197 多个窗口消息共享同一个消息处理函数 98 0198 遍历对话框中的子控件 99 0199 在程序中捕捉CException及其派生类的异常 100 0200 扩展消息映射宏 100 0201 THIS_FILE的含义 100 0202 为静态文本控件命名 100 0203 在基于对话框的应用程序中添加文档\视图的支持 101 0204 解析浮动状态下工具栏的父窗口 101 4.4 MFC编程技术 101 0205 根据位图资源ID获取位图大小 101 0206 将某个控件对象关联到对话框中的控件资源 102 0207 将一个全局函数指针关联到对话框类的某个方法 102 0208 修改应用程序的图标 102 0209 使用安全数组 103 0210 将子窗口的客户区域映射到父窗口中 103 0211 判断两个时间段的差距 103 0212 重新设置工程名称 103 0213 为dll文件生成lib文件 104 0214 如何将一个工程中的部分资源加到另一个工程中 104 0215 根据句柄获得窗口对象的方法 104 0216 如何共享MSDN 104 0217 从完整的文件名中去除路径 104 0218 从复合字符串中解析子串 105 0219 如何获得应用程序的完整路径 105 0220 修改对话框图标的几种方法 105 0221 将多个具有不同参数的函数赋值为同一个函数指针 105

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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