sizeof()和编译器的问题 在同一个编译器下,sizeof()函数会不会因为32位和64位平台的不同而出现不同呀?比如说sizeof(int),在32位下为4,用同样的VC++6.0在64位机上再编译会不会是8呀?问这个问题主要是因为小弟要做一个C/S模式的传输,害怕出现跨平台错误,已经将数据进行了转换,可以跨平台传输,但一个朋友现在告诉我根本没这样做的必要,本人不太懂编译器,想向各位求证下。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是的。编译器不同就不同的。你怕跨平台的时候出现字节不同,那就用那种指定是多长的数据咯。如INT32类似的一些类型 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(字节),所以楼主不用担心平台的问题. 我是打算在接收端直接以一个结构接收,是怕万一出现字长不一样而出现错误,比如我在发送端是发送的int,接收端也用int接收的话,万一字长出问题就麻烦了。 恩!如果是传结构。可能还要考虑字节对齐的问题。最好自己指定对齐值。比如#pragma pack(push, 1)#pragma pack(pop) 假如你发送的是一个int数据,但最后,你还得用memcpy()把这个数字copy到char型的buffer中啊. 这是一种好方法.还有一种方法就是在发送这个数字前,先把它转换成字符串,然后,接收端发到后,再转换成int型.这种方法麻烦. 还有,楼主,对socket编程不熟悉.建议看看<<WINDOWS网络编程技术>>. 高分请教:sprintf函数 与 字符集的问题,详见帖子 得花,例行散分(300) vc中怎么使绘制的线条颜色从红色到蓝色变化? 除了这里外,哪有还有比较旺的vc,c++论坛呀,现在好论坛不好找呀。(邮件列表,新闻组也行呀) 请教一个滚动条的问题 请问,如何获得jpg,gif和bmp图像的色深呢? 要份DDE通信的例程 VC++ 中函数执行顺序;请帮忙!! 求助高手,WM_SysCommand 怎么添加? 把一个整型数字如何转化成字符串阿,? 麻烦高手们参看一下我的代码,为什么提示查询失败呢?(注册表)在线等 我想处理音频设备,引用winmm.dll出错
你怕跨平台的时候出现字节不同,那就用那种指定是多长的数据咯。如INT32类似的一些类型
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(字节),所以楼主不用担心平台的问题.
最好自己指定对齐值。比如
#pragma pack(push, 1)
#pragma pack(pop)
建议看看<<WINDOWS网络编程技术>>.