今天在读《Linux高性能服务器编程》时看到一个有趣的东西。书中用了一个特别的方法去求字节序。我们知道字节序分为大端和小端,大端就是数据的高位字节存储在内存的低地址处,小段则反之。那么我们怎么知道我们的电脑是大端还是小端呢,这本书告诉我们可以利用union的特性,union里面的变量都是共享内存的,我们只需要将一个比如int类型的数据和一个数组union在一起,赋值那个int数据,然后看看数组的高位和低位分别是什么就知道了。

int main(){union{short value;char union_bytes[sizeof(short)];}test;test.value=0x0102;short a=test.union_bytes[0];cout<<a;if(test.union_bytes[0]==1&&test.union_bytes[1]==2)cout<<"big endian"<<endl;else if(test.union_bytes[0]==2&&test.union_bytes[1]==1)cout<<"little endian"<<endl;else cout<<"unknown...";
}

自从知道有大端小端这个东西的时候一直有个疑问,为什么在设计上不进行统一呢。出各种各样的标准统一接口不是计算机行业的人经常做的吗哈哈哈哈哈。我给出的解释方式是或许在不同的设备功能不一样,不同的方式可以更好的适应吧。

well,既然不同了那在进行网络传输中如果不统一就会出大问题的。所以Linux给我们提供了4个函数来完成主机字节序和网络字节序的转换,现在网络字节序通常是大端。

unsigned long int htonl(unsigned long int hostlong);
unsigned short int htons(unsigned short int hostshort);
unsigned long int ntohl(unsigned long int netlong);
unsigned short int ntohs(unsigned short int netshort);

union一个有趣的应用相关推荐

  1. 给小孩发布一个有趣的网站 在线动物园

    给小孩发布一个有趣的网站 在线动物园,可以实时看到动物园里的动物实时摄像头. 非常有意思,大热天也不用到动物园里看了. http://zoo.baidu.com/video.html

  2. 一个有趣的实验:用0.1f 替换 0,性能提升 7 倍!

    点击关注上方"视学算法",设为"置顶或星标",第一时间送达技术干货. 本文来源:http://cenalulu.github.io/linux/about-de ...

  3. 一个有趣的小例子,带你入门协程模块-asyncio

    上篇文章写了关于yield from的用法,简单的了解异步模式,[上次的内容链接]这次让我们通过一个有趣例子带大家了解asyncio基本使用. 目标效果图 在控制台中显示一个由ASCII字符" ...

  4. 这是一个有趣的问题,Java 8 Lambda 表达式被编译成了什么?

    在了解了Java 8 Lambda的一些基本概念和应用后, 我们会有这样的一个问题: Lambda表达式被编译成了什么? 这是一个有趣的问题,涉及到JDK的具体的实现.本文将介绍OpenJDK对Lam ...

  5. 分享一个有趣的学习方法,欢迎一起探讨如何提高学习兴趣作者:1-2-3 来源:博客园 发布时间:2009-03-09 16:20 阅读:2820 次 原文链接 [收藏]

    分享一个有趣的学习方法,欢迎一起探讨如何提高学习兴趣 作者:1-2-3  来源:博客园  发布时间:2009-03-09 16:20  阅读:2820 次  原文链接   [收藏]   有些人似乎天生 ...

  6. 编写一个弹出式菜单的shell程序_分享一个有趣的shell脚本--实现抓阄程序

    概述 今天主要分享一个有趣的shell脚本,用来实现抓阄,平时就不用剪刀石头布了. 需求 使用shell编写一个抓阄的程序: 1.执行脚本后,输入英文名字全拼,产生随机数01-99之间的数字,数字越大 ...

  7. firebug的一个有趣现象

    firebug的一个有趣现象 var obj = {length:0,splice:function(){}}console.log(obj) 猜猜上面会打印出啥? 没错,打印出来的看起来是一个空数组 ...

  8. 一个有趣的问题,讨论讨论

    昨天和一位同事讨论项目过程的一个问题,他提出一个有趣的案例: 假设制作一批茶壶,预定时间是10号,综合考虑10号之前肯定完成,于是定了10号的船,结果制作厂商5号就完成了,表面看起来提前完成是一个好事 ...

  9. 分享一个有趣的网站“让我帮你百度一下“

    如何解决同事的弱智问题,分享一个有趣的网站 日常工作中,总有些人会问你一些弱智的问题 你只需要三步就可以完美解决: 1.打开这个链接: 让我帮你百度一下 2.输入他的问题.点回车 3.复制结果链接甩到 ...

最新文章

  1. java订单实现的_java订单系统的开发
  2. 周星驰的10个华人记录
  3. 并发锁之二:ReentrantReadWriteLock读写锁
  4. 数据分析(排序,数据特征、平均数、方差等,累计统计,相关分析)
  5. 有关cvUpdateMotionHishtory,cvCalcMotionGradient等函数的使用
  6. environment variable
  7. 嵌入式linux应用程序开发详解_【精品套餐】嵌入式linux应用驱动开发完全学习路线...
  8. 在web开发中,如何保证对象只被创建一次之单例应用系列?
  9. dd var tmp .oracle,Oracle 11gR2 RAC ohasd failed to start 解决方法
  10. IBM Machine Learning学习笔记(二)——Supervised Learning: Regression
  11. 摘要抽取算法——最大边界相关算法MMR(Maximal Marginal Relevance)
  12. elementui el-input输入数字为整数的验证
  13. 网络安全之DOS攻击
  14. Java泛型编程思想
  15. Mac下phpstorm 浏览器出现 502 bad gateway 解决办法
  16. linux下使用PulseAudio获取扬声器的音量和是否静音
  17. excel函数去重_excel去掉重复值的函数用法
  18. 【Opencv综合应用】自制训练集的人脸识别2——制作csv文件
  19. 系统引导盘制作与Windows系统安装
  20. css一个点,用纯CSS从一个点到另一个点绘制一条线(路径)

热门文章

  1. 为什么c语言写程序要挂起,我运行的C语言程序挂起了,应该怎么办?
  2. 边缘计算网关linux开发,边缘计算网关(BMG800系列)二次开发指导手册
  3. php数据结构链表代码,数据结构之线性表——链式存储结构之单链表(php代码实现)...
  4. python当输入负数时结束_如何在lis中输入负数
  5. 局域网有几台电脑频繁断网_如何实现几台电脑同步共享资料文件?——用JASTVIN私密云盘...
  6. 成功解决‘nvidia-smi‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件
  7. 成功解决AttributeError: 'DataFrame' object has no attribute 'tolist'
  8. DL之SqueezeNet:SqueezeNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  9. Python语言学习之双下划线那些事:python和双下划线使用方法之详细攻略
  10. TF:基于CNN(2+1)实现MNIST手写数字图片识别准确率提高到99%