各位看管来一下,关于变量存储的高低位交换的问题? 我在工作中发现VC编译器中用memcpy函数来对一个结构或WORD或DWORD类型的变量进行内存复制然后存储时的高低位有交换现象,这和某些其它编译器的同样方法得出来的内存结果不同!也就是说编译器在编译是存在交换高低字节和不交换两种情况! 我想问的是:VC6中那里可以设置编译时的高低位是否交换! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 intel格式低位在前高位在后,这个你完全可以不关心,对你读取处理数据没有影响的 比如我把VC6中的一个WORD类型的变量用memcpy复制到一个 char buf[2]; 的内存里保存,然后在某些嵌入式开发环境的编译器里用memcpy函数对这个数据读取到某个WORD类型变量里,结果和当初保存的时候的值不同,原因就是两个编译器在内存里存储WORD类型变量的高低字节顺序不同,所以用char buf[2]; 来过度一下后就结果不同了! 我就是想知道如果让VC编译时可以设置到底要不要交换! 这不是交不交换的问题,不同的CPU体系内存数据存储格式是不同的,一般不需要关心。如果你开发的嵌入式系统内存数据存储格式不同,应该自己处理。 现在的问题是:如果我用VC6对一个数据结构保存了一份数据到硬盘,而我在嵌入式环境下要把这些数据还原到这个数据结构的变量中去就很难,因为我需要把硬盘数据按字节读出来生成和硬盘数据相同的数组来读取并还原!如果有非常多的这样的结构数据保存情况那就更加麻烦! 如果仅仅是WORD或DWORD的转换还容易,但是包含很多个成员的结构体的还原就很难了!所以最好是能让VC6编译时就改变存储规则! 你可以试试用htonl,htons,ntohl,ntohs处理一下,但我不保证结果,如果这个不行的话最好是自己转换一下,其实挺简单的 如果这样的话你就自己处理好了,c代码就是移位操作符号. 还有,VC仅仅是个IDE+COMPLIER,编译设置中应该不会有这种颠倒功能,因为寄存器中的高低位置是由CPU厂商来决定的。VC没有能力进入这一层。 WinPcap捕获数据包 LoadLibrary时发生Assert失败 VC程序运行时报错 应该怎样修改呀 怎样在程序中打开一个控制台程序,怎样为其赋值和获取返回信息? 用VC++6.0编程出现如下错误。。不知如何解决,请大家帮忙。。 关于 图形处理/算法 板块 发贴、结贴、FAQ提交的一些建议 查找算法问题 一个关于MFC消息映射的奇怪错误 我是新手,请问如何在turbo c上建立一个工程?? 如何在静态切分窗口中使用户无法移动窗口边框改变窗口尺寸呢 请问如何重命名 VC6总是安装不成功,有人知道原因吗?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货