请教个 big endian ,little endian 问题

unhappyless 2010-12-23 11:17:26
网络编程中,TCP/IP统一采用big endian方式传送数据,但在我们大多数cpu 都是以 little endian 处理多字节数据

为什么编程中send 和 recv 之前没调用什么 littleEndianToBigEndian 的函数 ?


send 的时候,指定地址指定长度,把这段内容发过去,貌似都不关心这段编码格式
...全文
119 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 coding_hello 的回复:]
send发送的是流,如果需要转换字节序,在发送前就得处理。

比如要发送一个结构体
struct NODE
{
int a; //这里a就需要转换字节序
char b[20];
};

NODE node;
//正常的赋值
node.a = 100;
strcpy(node.b, "hello, world");

//经过若干处理

//发送前转换字节序
……
[/Quote]
up
luciferisnotsatan 2010-12-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 coding_hello 的回复:]

send发送的是流,如果需要转换字节序,在发送前就得处理。

比如要发送一个结构体
struct NODE
{
int a; //这里a就需要转换字节序
char b[20];
};

NODE node;
//正常的赋值
node.a = 100;
strcpy(node.b, "hello, world");

//经过若干处理

//发……
[/Quote]
+1
手机写程序 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 eyey1 的回复:]
如果send或recv的结构体里有int,long类型,还是要其中一方处理的。
[/Quote]
好象有误导的嫌疑,补充下,其中一方是big endian,另一方是little endian.
野男孩 2010-12-24
  • 打赏
  • 举报
回复
send发送的是流,如果需要转换字节序,在发送前就得处理。

比如要发送一个结构体
struct NODE
{
int a; //这里a就需要转换字节序
char b[20];
};

NODE node;
//正常的赋值
node.a = 100;
strcpy(node.b, "hello, world");

//经过若干处理

//发送前转换字节序
node.a = htonl(node.a)

//发送
send(socket_handle, (char*)&node, sizeof(node), 0);
unhappyless 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 coding_hello 的回复:]
send发送的是流,如果需要转换字节序,在发送前就得处理。

比如要发送一个结构体
struct NODE
{
int a; //这里a就需要转换字节序
char b[20];
};

NODE node;
//正常的赋值
node.a = 100;
strcpy(node.b, "hello, world");

//经过若干处理

//发送前转换字节序
……
[/Quote]

你给的例子还是居于流的,用c++ 的话貌似没法基于字节发送,没这个api,对么?

还有,你的例子,我试过,不需要 htonl
手机写程序 2010-12-24
  • 打赏
  • 举报
回复
如果send或recv的结构体里有int,long类型,还是要其中一方处理的。
Wenxy1 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 unhappyless 的回复:]
网络编程中,TCP/IP统一采用big endian方式传送数据,但在我们大多数cpu 都是以 little endian 处理多字节数据
为什么编程中send 和 recv 之前没调用什么 littleEndianToBigEndian 的函数 ?
send 的时候,指定地址指定长度,把这段内容发过去,貌似都不关心这段编码格式
[/Quote]
1. send, recv都是发送char类型的数据,char是1个字节,所以不会存在big endian, little endian问题,也就是说big endian, little endian只针对2 bytes或者以上的数据才有意义。

2. 数据在内存里都是以字节形式存在的,内存的最小存储单元是1 byte.

mayudong1 2010-12-24
  • 打赏
  • 举报
回复
如果两端的字节序一样的话,可以完全不用考虑这个问题
renxu350 2010-12-23
  • 打赏
  • 举报
回复
send, recv 的参数是 char *,
也就是按照字节1个字节1个字节的传送,
所以不存在大尾小尾的问题,,,,,

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧