在同一个编译器下,sizeof()函数会不会因为32位和64位平台的不同而出现不同呀?比如说sizeof(int),在32位下为4,用同样的VC++6.0在64位机上再编译会不会是8呀?问这个问题主要是因为小弟要做一个C/S模式的传输,害怕出现跨平台错误,已经将数据进行了转换,可以跨平台传输,但一个朋友现在告诉我根本没这样做的必要,本人不太懂编译器,想向各位求证下。

解决方案 »

  1.   

    是的。编译器不同就不同的。
    你怕跨平台的时候出现字节不同,那就用那种指定是多长的数据咯。如INT32类似的一些类型
      

  2.   

    int send(
      SOCKET s,              
      const char FAR *buf,  
      int len,               
      int flags              
    );int sendto(
      SOCKET s,                        
      const char FAR *buf,            
      int len,                         
      int flags,                       
      const struct sockaddr FAR *to,  
      int tolen                        
    );从发送数据的缓冲区来看,是char 型的.char 是1 byte(字节),所以楼主不用担心平台的问题.
      

  3.   

    我是打算在接收端直接以一个结构接收,是怕万一出现字长不一样而出现错误,比如我在发送端是发送的int,接收端也用int接收的话,万一字长出问题就麻烦了。
      

  4.   

    恩!如果是传结构。可能还要考虑字节对齐的问题。
    最好自己指定对齐值。比如
    #pragma pack(push, 1)
    #pragma pack(pop)
      

  5.   

    假如你发送的是一个int数据,但最后,你还得用memcpy()把这个数字copy到char型的buffer中啊. 这是一种好方法.还有一种方法就是在发送这个数字前,先把它转换成字符串,然后,接收端发到后,再转换成int型.这种方法麻烦.
      

  6.   

    还有,楼主,对socket编程不熟悉.
    建议看看<<WINDOWS网络编程技术>>.