社区
C++ 语言
帖子详情
请教个 big endian ,little endian 问题
unhappyless
2010-12-23 11:17:26
网络编程中,TCP/IP统一采用big endian方式传送数据,但在我们大多数cpu 都是以 little endian 处理多字节数据
为什么编程中send 和 recv 之前没调用什么 littleEndianToBigEndian 的函数 ?
send 的时候,指定地址指定长度,把这段内容发过去,貌似都不关心这段编码格式
...全文
170
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个字节的传送,
所以不存在大尾小尾的问题,,,,,
关于
li
ttle
endian
和
big
endian
的
问题
关于
li
ttle
endian
和
big
endian
的
问题
导入:是因为一个小 demo中,录音一段内容传到后台播放都是嘈杂音,所引发的
问题
和学习 笼统的解释是:CPU处理器存储数据的字节顺序,分为
li
ttle
endian
和
big
endian
以下来详细的学习: - 首先来学习一下: 1、高/低地址端: 栈底 栈 栈顶 高地址端 低地址端...
Java中的
Big
(
Li
ttle
)-
endian
问题
的一种解决方法
http://blog.sina.com.cn/s/blog_d0bb1ceb0102v5gu.html Java二进制文件中的所有东西都以
big
-
endian
形式存在,高字节优先,这有时被称为网络顺序。这是一个好的消息,意味着如果你只使用 Java。所有文件在所有平台(Mac,PC,Solaris等)上按同样的方式进行处理。可以自由地交换二进制数据,以电子形式在Internet上, ...
Java中的
Big
/
Li
ttle
问题
Java中的
Big
/
Li
ttle
问题
1. 解决
Endian
问题
:一个总结Java二进制文件中的所有东西都以
big
-
endian
形式存在,高字节优先,这有时被称为网络顺序。这是一个好的消息,意味着如果你只使用Java。所有文件在所有平台(Mac,PC,Solaris等)上按同样的方式进行处理。可以自由地交换二进制数据,以电子形式在Internet上,或在软盘上,而无需考虑endia
big
-
endian
和
li
ttle
-
endian
问题
1.
BIG
-
ENDIAN
、
LI
TTLE
-
ENDIAN
跟多字节类型的数据有关的比如int,short,long型,而对单字节数据byte却没有影响。
BIG
-
ENDIAN
就是低位字节排放在内存的低端,高位字节排放在内存的高端。而
LI
TTLE
-
ENDIAN
正好相反。比如 int a = 0x05060708 在
BIG
-
ENDIAN
的情况下存放为:字节号 0 1 2 3 数据 05 06 07 08 在
LI
TTLE
-
ENDIAN
的情况下存放为:字节号 0 1 2 3 数据 08 07 06 05
li
ttle
endian
和
big
endian
问题
全面解读
在
li
ttle
endian
电脑上 #include int main() { long long a=1,b=2,c=3; printf("%d,%d,%d",a,b,c); } 我的电脑输出是 1,0,2 long 4个字节,long long 8个字节 由于x86电脑是
li
ttle
endian
,所以是按照从低到高的顺寻存储地址 a=0x01 存储的为10.....
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章