分享到:文章主题: Windows和Linux怎样传数据的?
confinement楼主
禁闭
身份
用户
文章
11609
星座
魔羯座
积分
4703
等级
沉香(10)

发信人: confinement (禁闭), 信区: CPlusPlus
标  题: Windows和Linux怎样传数据的?
发信站: 水木社区 (Thu Feb 13 22:20:40 2020), 站内
  
http://blog.csdn.net/foreverfresh/article/details/6731785
  
6701.com_【官方首页】-彩票网程序在Linux和Windows之间传数据,结果报long数据不兼容。然后查网页看到上面了解到,两个系统的long数据类型位数不一样...这样,两个系统之间,凡带有long类型的数据就不能直接传了??
  
--
  
※ 来源:·水木社区 http://stepinmars.com·[FROM: 223.104.63.*]

返回顶部
confinement第1楼
禁闭
身份
用户
文章
11609
星座
魔羯座
积分
4703
等级
沉香(10)

发信人: confinement (禁闭), 信区: CPlusPlus
标  题: Re: Windows和Linux怎样传数据的?
发信站: 水木社区 (Thu Feb 13 22:26:34 2020), 站内
  
这还不止是直接的数据结构本身是否含有long的问题,不含long成员的结构体、类本身也还是可能隐含long数据用以维护自身信息吧(这取决于编译器的安排?),这样的话,那怎么夸平台传数据呢?~
  
【 在 confinement 的大作中提到: 】
: http://blog.csdn.net/foreverfresh/article/details/6731785
: 程序在Linux和Windows之间传数据,结果报long数据不兼容。然后查网页看到上面了解到,两个系统的long数据类型位数不一样...这样,两个系统之间,凡带有long类型的数据就不能直接传了??
  
--
※ 修改:·confinement 于 Feb 13 23:04:04 2020 修改本文·[FROM: 223.104.63.*]
※ 来源:·水木社区 http://stepinmars.com·[FROM: 223.104.63.*]

返回顶部
z16166第2楼
z16166
身份
用户
文章
4699
星座
魔羯座
积分
39996
等级
灵樨(8)

发信人: z16166 (z16166), 信区: CPlusPlus
标  题: Re: Windows和Linux怎样传数据的?
发信站: 水木社区 (Thu Feb 13 22:32:11 2020), 站内
  
那个网页说的是单机的数据模型,是编译器用的。跟跨系统传数据没关系。
  
跨系统主要是big endian和little endian的问题,
统一用网络字节序就行了,网络字节序是big endian的。
htons/htonl/ntohs/ntohl这些函数/宏可以转换字节序。
--
  
※ 来源:·水木社区 http://stepinmars.com·[FROM: 123.115.134.*]

返回顶部
hoodlum第3楼
hoodlum
身份
用户
文章
588
星座
水瓶座
积分
770
等级
草根(3)

发信人: hoodlum (hoodlum), 信区: CPlusPlus
标  题: Re: Windows和Linux怎样传数据的?
发信站: 水木社区 (Thu Feb 13 22:36:50 2020), 站内
  
  
6701.com_【官方首页】-彩票网尽可能用 stdint.h 里面的定义,比如 int32_t。
6701.com_【官方首页】-彩票网新的编辑器基本都支持了。
  
不要在跨模块,跨编译器间
  
使用 size_t, long, long long, 这种尺寸比较模糊的类型。
  
  
  
  
【 在 confinement (禁闭) 的大作中提到: 】
: http://blog.csdn.net/foreverfresh/article/details/6731785
: 程序在Linux和Windows之间传数据,结果报long数据不兼容。然后查网页看到上面了解到,两个系统的long数据类型位数不一样...这样,两个系统之间,凡带有long类型的数据就不能直接传了??
  
  
--
  
※ 修改:·hoodlum 于 Feb 13 22:38:39 2020 修改本文·[FROM: 139.226.109.*]
※ 来源:·水木社区 stepinmars.com·[FROM: 139.226.109.*]

返回顶部
confinement第4楼
禁闭
身份
用户
文章
11609
星座
魔羯座
积分
4703
等级
沉香(10)

发信人: confinement (禁闭), 信区: CPlusPlus
标  题: Re: Windows和Linux怎样传数据的?
发信站: 水木社区 (Thu Feb 13 22:45:13 2020), 站内
  
想序列化/反序列化就有关系了呀,传递的字节数就不一样...
  
【 在 z16166 的大作中提到: 】
: 那个网页说的是单机的数据模型,是编译器用的。跟跨系统传数据没关系。
: 跨系统主要是big endian和little endian的问题,
6701.com_【官方首页】-彩票网: 统一用网络字节序就行了,网络字节序是big endian的。
: ...................
  
--
  
※ 来源:·水木社区 http://stepinmars.com·[FROM: 223.104.63.*]

返回顶部
confinement第5楼
禁闭
身份
用户
文章
11609
星座
魔羯座
积分
4703
等级
沉香(10)

发信人: confinement (禁闭), 信区: CPlusPlus
标  题: Re: Windows和Linux怎样传数据的?
发信站: 水木社区 (Thu Feb 13 22:51:21 2020), 站内
  
不好整了,代码是已经做成了的。况且,是不是会有我前面说的问题,即使你不用那些数据类型,编译器本身为维护数据结构也可能要产生模糊数据类型吧
  
看起来,就不能直接序列化/反序列化,只能把数据的类型信息丢掉,都整成原始的长度无分歧的类型来传输,然后再“手工”恢复类型?
  
【 在 hoodlum 的大作中提到: 】
: 尽可能用 stdint.h 里面的定义,比如 int32_t。
6701.com_【官方首页】-彩票网: 新的编辑器基本都支持了。
: 不要在跨模块,跨编译器间
: ...................
  
--
  
※ 来源:·水木社区 http://stepinmars.com·[FROM: 223.104.63.*]

返回顶部
z16166第6楼
z16166
身份
用户
文章
4699
星座
魔羯座
积分
39996
等级
灵樨(8)

发信人: z16166 (z16166), 信区: CPlusPlus
标  题: Re: Windows和Linux怎样传数据的?
发信站: 水木社区 (Thu Feb 13 22:58:14 2020), 站内
  
你的同一份代码,会在windows和linux上都编译?
  
还是同一份代码会在linux上同时编译出32和64位的二进制?
  
针对特定的OS、特定的位宽(32还是64)处理就行,
其他暂时不需要支持的情况,用宏检测了直接报编译错误,等着有需要时再fix。
  
跨进程、跨机器的接口中的字段,理论上需要是宽度确定的字段,不能是宽度跟着编译器动态变的字段类型。
  
【 在 confinement 的大作中提到: 】
: 想序列化/反序列化就有关系了呀,传递的字节数就不一样...
:  
  
--
※ 修改:·z16166 于 Feb 13 23:01:15 2020 修改本文·[FROM: 123.115.134.*]
※ 来源:·水木社区 http://stepinmars.com·[FROM: 123.115.134.*]

返回顶部
confinement第7楼
禁闭
身份
用户
文章
11609
星座
魔羯座
积分
4703
等级
沉香(10)

发信人: confinement (禁闭), 信区: CPlusPlus
标  题: Re: Windows和Linux怎样传数据的?
发信站: 水木社区 (Thu Feb 13 23:03:18 2020), 站内
  
准确点说是同一个struct,本来想像两台Linux之间那样,这边机器实例序列化传过去,那边反序列化出来就用    可是现在,那边同事因为特定软件平台缘故,只能跑Windows
  
【 在 z16166 的大作中提到: 】
: 你的同一份代码,会在windows和linux上都编译?
: 还是同一份代码会在linux上同时编译出32和64位的二进制?
: 针对特定的OS、特定的位宽(32还是64)处理就行,
: ...................
  
--
  
※ 来源:·水木社区 http://stepinmars.com·[FROM: 223.104.63.*]

返回顶部
confinement第8楼
禁闭
身份
用户
文章
11609
星座
魔羯座
积分
4703
等级
沉香(10)

发信人: confinement (禁闭), 信区: CPlusPlus
标  题: Re: Windows和Linux怎样传数据的?
发信站: 水木社区 (Thu Feb 13 23:14:44 2020), 站内
  
后续重新开始干活的话可以这么考虑,但是我这里试了一个只有一个int 数据成员的struct,还是包错。编译后,可能这个结构它还是会有long类型的东西,编译器给它加了一堆东西吧,或者,是序列化库加的
  
【 在 z16166 的大作中提到: 】
: 你的同一份代码,会在windows和linux上都编译?
: 还是同一份代码会在linux上同时编译出32和64位的二进制?
: 针对特定的OS、特定的位宽(32还是64)处理就行,
: ...................
  
--
  
※ 来源:·水木社区 http://stepinmars.com·[FROM: 223.104.63.*]

返回顶部
hgoldfish第9楼
老鱼
身份
版主
文章
69952
积分
100123
等级
斗拱(14)

发信人: hgoldfish (老鱼), 信区: CPlusPlus
标  题: Re: Windows和Linux怎样传数据的?
发信站: 水木社区 (Thu Feb 13 23:20:01 2020), 站内
  
6701.com_【官方首页】-彩票网别瞎猜了。想仔细了解的话,可以看看 endian,以及 int, long 等类型在不同平台下的数据长度,以及结构体内存对齐这些知识。不想了解就用上跨平台序列化反序列化了事,可供选择的是:
  
json, msgpack, protobuf
  
如果你们用的是 Qt, 还可以用 Qt 特有的 QDataStream
  
boost 那个很多说不好用。
  
【 在 confinement (禁闭) 的大作中提到: 】
: 后续重新开始干活的话可以这么考虑,但是我这里试了一个只有一个int 数据成员的struct,还是包错。编译后,可能这个结构它还是会有long类型的东西,编译器给它加了一堆东西吧,或者,是序列化库加的
  
  
--
灭绝人性啊
  
  
※ 来源:·水木社区 stepinmars.com·[FROM: 183.250.222.*]

返回顶部
  • 文章数:30 分页:
    1. 1
    2. 2
    3. 3
    4. >>

页面底部区域 foot.htm