c语言和java 使用socket通信的时候 数据大小端转换的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言和java 使用socket通信的时候 数据大小端转换的问题相关的知识,希望对你有一定的参考价值。

c 传输给 java的数据 java可以解析出来,java传输给 c的数据 c 解析不出来,求解决问题,分不是问题

参考技术A 我也搞网络编程搞好久了,大小端这个问题倒是没有遇到过啊,我同事做Java,我做ios都一样的,都是小端的。
建议你用抓包软件抓下包看看,还有就是注意发送时数据对齐问题,不同的系统可能一样的类型长度就不一样,比如在mac系统中long型有8字节,但是在IOS、VC中就只有四个字节,一般使用socket发送数据时都是打包发送的(头部一般都是固定的结构体),这个问题必须要注意
参考技术B 大小端转换就是移位,拼接,用C实现很简单。
至于解析出问题,可以约定双方以字节流进行通信,比如,约定一个浮点数拆成文本,或者一个32位长整拆成四个字节,先传送低字节(或高字节),约定好以后,两边都照做就可以了。追问

能 加说么,我 有实现代码,c 传输给 java的 能解析出来,java传输给 c的 解析不出来,麻烦 帮看看 1 3 4 107 25 50

追答 

大小端转换就是移位、拼接。

uint32_t sub( uint32_t x )

uint8_t y1, y2, y3, y4;
y1 = (uint8_t)x; x >>= 8;
y2 = (uint8_t)x; x >>= 8;
y3 = (uint8_t)x; x >>= 8;
y4 = (uint8_t)x;
x = y1; x <<= 8;
x |= y2; x <<= 8;
x |= y3; x <<= 8;
x |= y4;
return x;


参考技术C 用Json格式组织数据进行传递,应该没有问题的。

以上是关于c语言和java 使用socket通信的时候 数据大小端转换的问题的主要内容,如果未能解决你的问题,请参考以下文章

C语言socket高并发网络编程

一起talk C栗子吧(第一百五十一回:C语言实例--socket通信地址)

通信大小端记录

高质量通信gRPC入门,有了它,谁还用Socket

go语言快速入门 IPC之Socket 9

socket编程。怎么实现数据包的转发?C语言版的。