社区
无线
帖子详情
为何网络传输中字符串不需要进行大小端的转换。
m0_37902349
2017-05-05 06:05:33
刚写一个网络程序,在嵌入式上面int类型数据是需要进行转换的,但是字符串却不需要能够直接发送。求解答。
...全文
3363
3
打赏
收藏
为何网络传输中字符串不需要进行大小端的转换。
刚写一个网络程序,在嵌入式上面int类型数据是需要进行转换的,但是字符串却不需要能够直接发送。求解答。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
grf123
2018-07-24
打赏
举报
回复
大小端的区别是表达大于一个字节以上的数字的方式不同,仅此而已。
qq_41309970
2018-01-02
打赏
举报
回复
1
不转换的话love you 为什么不会变成uoy evol?
zhisong123
2017-07-03
打赏
举报
回复
4
小端字节序和大端字节序中,区别在于地地址存低位还是高位的区别,字节序中的低位和高位仅针对大于1个字节的组合内存空间(自己定义的名词,就是值的大小是要多个内存单元组合而成,比如int是4个字节(32位或64位上),那么int类型的值就要4个内存单元组合得到)。内存的单位是字节,对于字符来说,char是1个字节,不受主机字节序和网络字节序的影响,在内存中就一个单元,没有前后之分。但是当是组合内存空间时,因为有多个内存单元,就有前后之分,而小端和大端字节序的差别就在于怎么对这个前后内存单元进行组合。小端字节序中,是在第一个内存单元中存放低位(即低地址),接下来的内存单元依次存放高位。而在大端字节序中,是在第一个内存单元中存放高位(即低地址),接下来的内存单元依次存放低位。 举例:整形值10000,对应十六进制表示为0x2710,按照字节可分为0x27(高位)和0x10(低位) 小端字节序:第一个内存单元就是低地址,存放低位:0x10,接下来的内存单元是高地址,存放高位:0x27 --->0x1027 大端字节序:第一个内存单元就是低地址,存放高位:0x27,接下来的内存单元是低地址,存放低位:0x10 --->0x2710 那么,我们假设网络传输10000这个值,因为是通过字节传输,所以网络传输的值是10 27 00 00。 如果发送端和接收端的字节序一致,那么网络传输的时候,可不进行大小端转换,一样能获得相同的值。 下面的结果是建立在一个前提之上:网络传输的字节序和主机字节序不同。 结果: 既然知道了这个差别,那么我们知道,数组是连续分配内存的,每个数组单元的存放空间是由数组类型决定,但是数组单元间的前后顺序是固定了的。那么在网络传输后,数组各单元的先后顺序不会改变,至于数组单元的值,如果数组类型不止占1个字节的话,就会发生改变。而字符串是字符数组,字符是占1个字节,所以接收端没有进行大小端转换的话也不会影响最终的字符串值。 至于为什么规定网络传输的时候,要按照大端字节序传输,其实是为了避免发送数据端和接收数据端的机器两边本地的字节序不一致导致接收数据不一致。如果哪边是字节序和网络字节序是一致的,那么就可以不用大小端转换,反之,不一致就要执行大小端转换
网络
传输
过程过
大小端
问题 注意
字符串
是不
需要
的
在
网络
传输
过程
中
自定义协议,就显得比较重要了,比如size等,前提是你要跨平台。
网络
传输
数据要不要
转换
大小端
字节序的问题? (2009-1-4 21:29)我看到书上讲
网络
时都是说:Internet上的数据以大端方式在
网络
上
传输
,所以对于内部是小端方式储存数据的机器,在internet上
传输
数据时就
需要
进行
字节
转换
。 但是我看了一些程序,只有sockaddr_in 这个结构
中
si
js如何获取
字符串
大小是几M
在上述代码
中
,getStringSizeInBytes函数接收一个
字符串
作为参数,并使用Blob对象将
字符串
转换
为字节数组。然后,通过将字节长度除以1024*1024来计算
字符串
的大小(以兆字节为单位)。最后,将结果返回并打印到控制台。请注意,这种方法计算的是
字符串
在内存
中
占用的字节大小,而不是
字符串
在
网络
传输
中
的实际大小。如果
字符串
包含非ASCII字符或Unicode字符,那么由于编码的原因,实际的
传输
大小可能会更大。
为什么主机或
网络
字节序对
字符串
不影响结果
当
进行
网络
传输
时,都要求按照
网络
字节序
进行
传输
。当接收到结果后,如果我们系统使用的字节序不是
网络
字节序,那么如果不对整形的结果
进行
大小端
转换
,结果就会错误,疑问,为什么
字符串
的值不受影响?? 思考: 主机字节序和
网络
字节序
中
,区别在于地地址存低位还是高位的区别,字节序
中
的低位和高位仅针对大于1个字节的组合内存空间(自己定义的名词,就是值的大小是要多个内存单元组合而成,比如int是4个字
大小端
--
字符串
小端字节序和大端字节序
中
,区别在于地地址存低位还是高位的区别,字节序
中
的低位和高位仅针对大于1个字节的组合内存空间(自己定义的名词,就是值的大小是要多个内存单元组合而成,比如int是4个字节(32位或64位上),那么int类型的值就要4个内存单元组合得到)。内存的单位是字节,对于字符来说,char是1个字节,不受主机字节序和
网络
字节序的影响,在内存
中
就一个单元,没有前后之分。但是当是组合内存空间时...
用c++实现
大小端
序互转(
字符串
方法)
今天在逆一个RC4加密算法,忘了IDA如何自动将
大小端
序互转的按键,索性自己写了一个,因为是用
字符串
方法,所以理论上长度是管够的。非常简单,直接ctrl cv走就行。
无线
3,846
社区成员
5,006
社区内容
发帖
与我相关
我的任务
无线
硬件/嵌入开发 无线
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 无线
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章