我在工作中发现VC编译器中用memcpy函数来对一个结构或WORD或DWORD类型的变量进行内存复制然后存储时的高低位有交换现象,这和某些其它编译器的同样方法得出来的内存结果不同!也就是说编译器在编译是存在交换高低字节和不交换两种情况!
    
    我想问的是:VC6中那里可以设置编译时的高低位是否交换!

解决方案 »

  1.   

    intel格式低位在前高位在后,这个你完全可以不关心,对你读取处理数据没有影响的
      

  2.   

    比如我把VC6中的一个WORD类型的变量用memcpy复制到一个 char buf[2]; 的内存里保存,然后在某些嵌入式开发环境的编译器里用memcpy函数对这个数据读取到某个WORD类型变量里,结果和当初保存的时候的值不同,原因就是两个编译器在内存里存储WORD类型变量的高低字节顺序不同,所以用char buf[2]; 来过度一下后就结果不同了!    我就是想知道如果让VC编译时可以设置到底要不要交换!
      

  3.   

    这不是交不交换的问题,不同的CPU体系内存数据存储格式是不同的,一般不需要关心。如果你开发的嵌入式系统内存数据存储格式不同,应该自己处理。
      

  4.   

    现在的问题是:如果我用VC6对一个数据结构保存了一份数据到硬盘,而我在嵌入式环境下要把这些数据还原到这个数据结构的变量中去就很难,因为我需要把硬盘数据按字节读出来生成和硬盘数据相同的数组来读取并还原!如果有非常多的这样的结构数据保存情况那就更加麻烦!  如果仅仅是WORD或DWORD的转换还容易,但是包含很多个成员的结构体的还原就很难了!所以最好是能让VC6编译时就改变存储规则!
      

  5.   

    你可以试试用htonl,htons,ntohl,ntohs处理一下,但我不保证结果,如果这个不行的话最好是自己转换一下,其实挺简单的
      

  6.   

    如果这样的话你就自己处理好了,c代码就是移位操作符号. 还有,VC仅仅是个IDE+COMPLIER,编译设置中应该不会有这种颠倒功能,因为寄存器中的高低位置是由CPU厂商来决定的。VC没有能力进入这一层。