社区
C++ 语言
帖子详情
请教个 big endian ,little endian 问题
unhappyless
2010-12-23 11:17:26
网络编程中,TCP/IP统一采用big endian方式传送数据,但在我们大多数cpu 都是以 little endian 处理多字节数据
为什么编程中send 和 recv 之前没调用什么 littleEndianToBigEndian 的函数 ?
send 的时候,指定地址指定长度,把这段内容发过去,貌似都不关心这段编码格式
...全文
119
9
打赏
收藏
请教个 big endian ,little endian 问题
网络编程中,TCP/IP统一采用big endian方式传送数据,但在我们大多数cpu 都是以 little endian 处理多字节数据 为什么编程中send 和 recv 之前没调用什么 littleEndianToBigEndian 的函数 ? send 的时候,指定地址指定长度,把这段内容发过去,貌似都不关心这段编码格式
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xx说就叫这个名字
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]
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个字节的传送,
所以不存在大尾小尾的问题,,,,,
Big
Endian
&
Li
ttle
Endian
.pdf
Big
Endian
&
Li
ttle
Endian
.pdf
Big
Endian
&
Li
ttle
Endian
.pdf
nohead
big
endian
to
li
ttle
endian
nohead data
big
endian
to
li
ttle
endian
li
ttle
endian
和
big
endian
的概念解释
li
ttle
endian
和
big
endian
的概念解释
Li
ttle
_
Big
_
endian
.rar_
big
endian
_
li
ttle
比较详细的介绍了大小端
问题
。嵌入式系统开发者应该对
Li
ttle
-
endian
和
Big
-
endian
模式非常了解。
大端(
Big
Endian
)与小端(
Li
ttle
Endian
)简介.doc
大端(
Big
Endian
)与小端(
Li
ttle
Endian
)简介
C++ 语言
64,646
社区成员
250,479
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章