Unix 网络编程基础----网络字节序(大端小端)
2015-08-16 21:12
555 查看
什么是字节序?
内存中多字节值在内存中的存储方式考虑一个16位整数
0x1122,由两个字节组成,其在内存中有两种存储方法:
网际协议使用大端字节序传送多字节整数
主机字节序判断方法
1. 使用union:
[code]#include<iostream> using namespace std; int main() { union { short s; char c[sizeof(short)]; } un; un.s = 0x1122; if(sizeof(short) == 2) { if(un.c[0] == 0x11 && un.c[1] == 0x22) cout << "Big Endian" << endl; else if(un.c[0] == 0x22 && un.c[1] == 0x11) cout << "Little Endian" << endl; else cout << "unknown" << endl; } //c[0]为低地址,c[1]为高地址,11为高八位,22为低八位 else cout << "short size: " << sizeof(short) << endl; return 0; }
在ubuntu15.04,64位中输出为
Little Endian
2. 使用指针的强制类型转换
[code]#include<iostream> #include<iomanip> using namespace std; template<typename t> void showBytes(t &x) { int len = sizeof(t); unsigned char* ptr = reinterpret_cast<unsigned char*>(&x); //cout << len << endl; cout << "0x"; for(int i(0); i != len; ++i) { cout << setw(2) << setfill('0') << hex << static_cast<int>(ptr[i]) << flush; } cout << endl; } int main() { short val = 0x1122; showBytes(val); return 0; }
同样在本机的系统中,输出
0x2211,说明低位在前,高位在后,即本机为小端字节序。
相关文章推荐
- 网络编程TCP(六)
- 【工业串口和网络软件通讯平台(SuperIO)教程】七.二次开发服务驱动
- 【工业串口和网络软件通讯平台(SuperIO)教程】七.二次开发服务驱动
- TCP/IP详解 卷I:协议 のFAQ
- Unix 网络编程基础----套接字地址结构
- 网络流模板
- 网络(4.1)—AFNetworking多任务异步请求
- 64位ubuntu 15.04 只能连接无线网络无法连接有线网络的问题(不要作死用英文版,Drcom可用)
- netbeans快捷键一览(转http://blog.sina.com.cn/s/blog_698fa5930100m2nf.html)
- Java学习之路0805(基于TCP带有界面的网络通信)
- 百购团购网骗钱(被完美世界(北京)网络技术有限公司骗钱经过)
- 20个你可能不知道的 Linux 网络工具
- Android笔记_网络编程
- IOS之网络状态设和NSUserDefaults的synchronize
- java的多线程同步及锁的机制 http://f.dataguru.cn/thread-483280-1-1.html (出处: 炼数成金)
- HTTP详解-工作原理
- Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
- android使用HttpURLConnection实现带参数文件上传
- Java学习之路0803(URL、基于UDP的数据包网络通信)
- Java学习之路0802(网络通信)