编写底层低层网络应用时,或许需要处理通过电缆在两台设备之间传送的低层数据。在这种操作中,需要把主机操作系统发出的数据转换成网络格式,或者做逆向转换,因为这两种数据的表示方式不一样。

1. 代码

# 主机字节序和网络字节序之间的相互转换import socketdef convert_integer():data = 1234# 32-bitprint("Original: %s => Long host byte order: %s, Network byte order: %s"% (data, socket.ntohl(data), socket.htonl(data)))# 16-bitprint("Original: %s => Short host byte order: %s, Network byte order: %s"% (data, socket.ntohs(data), socket.htons(data)))if __name__ == '__main__':convert_integer()

2. ntohl()、ntohs()、htonl()和htons()解释

def ntohl(integer):  # real signature unknown; restored from __doc__"""ntohl(integer) -> integerConvert a 32-bit integer from network to host byte order."""return 0# 将网络字节顺序转换成主机字节顺序(32bit)def ntohs(integer):  # real signature unknown; restored from __doc__"""ntohs(integer) -> integerConvert a 16-bit integer from network to host byte order."""return 0# 将网络字节顺序转换成主机字节顺序(16bit)def htonl(integer):  # real signature unknown; restored from __doc__"""htonl(integer) -> integerConvert a 32-bit integer from host to network byte order."""return 0# 将主机字节顺序转换成网络字节顺序(32bit)def htons(integer):  # real signature unknown; restored from __doc__"""htons(integer) -> integerConvert a 16-bit integer from host to network byte order."""return 0# 将主机字节顺序转换成网络字节顺序(16bit)

3.网络字节顺序和主机字节顺序解释

网络字节顺序NBO(Network Byte Order): 按从高到低的顺序存储,在网络上使用统一的网络字节顺序,可以避免兼容性问题。

主机字节顺序(HBO,Host Byte Order): 不同的机器HBO不相同,与CPU设计有关,数据的顺序是由cpu决定的,而与操作系统无关。
如 Intel x86结构下, short型数0x1234表示为34 12, int型数0x12345678表示为78 56 34 12
如 IBM power PC结构下, short型数0x1234表示为12 34, int型数0x12345678表示为12 34 56 78

4.运行结果

1 Original: 1234 => Long host byte order: 3523477504, Network byte order: 3523477504
2 Original: 1234 => Short host byte order: 53764, Network byte order: 53764

python3 网络编程 主机字节序 网络字节序 相互转换相关推荐

  1. 网络编程主机号和网络号转化

    1.1. 套接口概念          套接口,也叫"套接字".是操作系统内核中的一个数据结构,它是网络中的节点进行相互通信的门户.它是网络进程的 ID.两个进程通信时,首先要确定 ...

  2. linux网络编程(一)网络基础传输知识

    linux网络编程(一)网络传输基础知识 一.什么是协议? 二.使用步骤 典型协议 2.网络应用程序设计模式 C/S模式 B/S模式 优缺点 3.分层模型 4.TCP/IP四层模型 通信过程 5.协议 ...

  3. python网络编程需要学什么,python网络编程学习笔记(五):socket的一些补充 Python 网络编程需要学习哪些网络相关的知识...

    python的socket编程问题hdr = recvall(s, 5) if hdr is None: print 'Unexpected EOF receivingstruct在unpack的时候 ...

  4. 陈硕《网络编程实战》01 网络编程概要

    陈硕<网络编程实战> 01 网络编程概要 站在巨人的肩膀之上. 按照录像整理,部分专有名词不太肯定,版权归陈硕大神. 大家好,我是陈硕,受邀讲授一门有关网络编程的在线课程,这门课程的名称是 ...

  5. Linux C编程--网络编程1--字节顺序和字节处理函数

    字节顺序 不同的 CPU 有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序  最常见的有两种  1 . Little endian :将低序字节存储在起始地址  2 . Big ...

  6. 迈入JavaWeb第一步,Java网络编程基础,TCP网络编程URL网络编程等

    文章目录 网络编程概述 网络通信要素 要素一IP和端口号 要素二网络协议 TCP网络编程 UDP网络编程 URL网络编程 Java网络编程基础 网络编程概述 Java是Internet上的语言,它从语 ...

  7. TCP/IP网络编程:P1->理解网络编程和套接字

    本系列文章为<TCP/IP网络编程----尹圣雨>学习笔记 文章目录 一.理解网络编程和套接字 1.1 构建接电话套接字 1.2 编写"Hello world!"服务器 ...

  8. 网络编程步骤linux,Linux网络编程的一般步骤(1)

    一.套接字的地址结构. IPV4套接字地址结构通常也称为"网际套接字地址结构",它以sockaddr_in 命名;POSIX定义如下: #include struct in_add ...

  9. java运用网络编程技术代码_Java 网络编程

    java网络编程 1.什么叫计算机网络? 由不同地理位置的不同计算机主机,连接起来组成的网络. 2.什么叫网络编程? 在网络的基础上,使用网络进行编程,对应用层进行设计的活动. 3.网络编程三要素:I ...

最新文章

  1. Lync 2013 与 Elastix 2.40 语音通信设置全过程(3)
  2. 王守仁的学前教育思想
  3. H3C通过端口ID决定端口角色
  4. python split函数 空格_python上手--10行代码读懂红楼梦
  5. java 配置hdfs集群_Hadoop集群搭建-04安装配置HDFS
  6. Shell脚本编程基础笔记一
  7. 静默安装oracle后,启动oem报错,解决方法!
  8. python脚本-记录Python脚本的运行日志的方法
  9. java环境变量配置和android sdk环境变量配置
  10. 易语言 linux 反编译,易语言反编译工具(E-Code Explorer)
  11. 思科笔记-Four,ospf协议实现全网互通,spf算法,简短总结篇
  12. 新西兰计算机预科学费多少钱,去新西兰读预科需要多少费用?
  13. syntax sugar 2
  14. Multisim基础 共阴极数码管是com_k,共阳极数码管是com_a
  15. 手写数字图片数据之python读取保存、二值化、灰度化图片+opencv处理图片的方法
  16. 已经不再这里更新博客了,更多博客内容可以去gayhub看看
  17. 东京奥运会将采用人脸识别系统 加强安检
  18. c语言简单的字符串处理
  19. 疯狂Java讲义(四)
  20. 安卓Android调用C语言实现其他进程应用app的内存变量读取修改与利用BusyBox实现应用暂停和恢复(Native层)

热门文章

  1. Linux 操作系统原理 — 内存 — 页式管理、段式管理与段页式管理
  2. 电信设备产品简介材料收集
  3. EVT DVT PVT TP PP MP分别指哪个阶段
  4. Istio调用链埋点原理剖析—是否真的“零修改”?
  5. BLOCK层基本概念:bio,request,request_queue
  6. BZOJ3133[ballmachine]——倍增+优先队列
  7. PHP - 获取音频长度
  8. 注册asp.net 4.0 到iis
  9. KVM 介绍(4):I/O 设备直接分配和 SR-IOV [KVM PCI/PCIe Pass-Through SR-IOV]
  10. allocWithZone