- 论坛徽章:
- 0
|
把问题描述清楚 再修改一下 ....
A 方 linux + g++3 发送结构体数据
struct Data
{
char A[26];
char B[26];
unsigned long time;
unsigned long count;
}
B方 win2000+ vc 接收结构体数据
--------------------------------------------------------------------------------
A发送的数据在A方端口出抓出 内存中的排列为:
32 33 38 30 31 33 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
32 33 36 32 37 31 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
15 75 09 49
02 00 00 00
B方在本地端口处抓得数据包 经确认与A所抓一致
--------------------------------------------------------------------------------
dev c++开发的模拟B接收的程序代码 可以按照左对齐读取 数据接收OK
char temp[61];
int iRet = recv(m_sockfd, temp, 60, 0);
fd << ((Data *)temp)->A;
fd << ((Data *)temp)->B;
fd << ((Data *)temp)->time;
fd << ((Data *)temp)->count;
B方接收处的实际接收代码 struct Data = strcut ReceiveSMBody
buflen = Receive(body, MAX_PACKET_LEN);
ReceiveSMBody receivedata;
memcpy(&receivedata, body, sizeof(ReceiveSMBody));
char A[32] ;
char B[32] ;
unsigned long time;
unsigned long count;
sprintf(A,receivedata.A);
sprintf(B,receivedata.B);
time = receivedata.time;
count= receivedata.count;
---------------------------------------------------------------------------------
然后B方接收时是按照右对齐接收(B说的), 反映数据接收不正常
我觉得如果是有问题的话 应该的是编译器的差异造成的
请问 如果不专门写函数处理的话 A方是否有相关的编译器参数 是真实数值在内存中右对齐
谢谢.......
还是只需要完成 big endian到little endian的转换就ok 正在尝试...
(字符串右对齐之后 我的模拟程序接收到两个字符数组打印结果为空,想也是必然...首字母为0)
暂时的解决方法 是 A发送前 sprintf( Data .A, "%25s", A);
很大怀疑 自己是被人玩了 ):
[ 本帖最后由 senic 于 2008-11-6 00:25 编辑 ] |
|