POCO C++库学习和分析 -- 数据类型转换
文章写到这里,Foundation库中的功能已经介绍过半了。在接下去介绍其他模块之前,我们先来回顾一下前面的内容。前面的内容包括了:
1. SharedLibrary模块(插件技术) 《Foundation库SharedLibrary模块分析》
2. 线程(锁,线程,线程池,定时器,任务,主动对象) 《线程》
3. 内存管理(智能指针,内存池,自动释放的对象池,对象工厂) 《内存管理》
4. 进程(进程,进程通讯) 《进程》
5. 消息和事件(同步/异步消息传递,消息队列) 《通知和事件》
有了这些模块,我们就可以搭建起一个本地程序的框架了(当然这不包括绘图和显示,Poco库不提供这些功能)。程序的框架很重要,就如同人的骨架和血液一样,决定了一个程序的结构,间接的影响了程序的可修改性和可维护性,但这还不够,要写出一个完整的程序,我们还需要其他的一些部分,这些部分也很重要,就如同人的肌肉和衣服。
下面介绍Foundation库中关于转换的几个类:1. ByteOrder
ByteOrder提供了一系列的静态函数用于字节序的转换。在使用这个类之前,让我们先了解一下它所解决问题。它主要用来解决big-endian和litter-endian的问题。1.1 big-endian和litter-endian
big-endian和litter-endian指的是读取存储时的数据解释方式。它们只和多字节类型的数据有关,比如说int,short,long型,而对单字节数据byte却没有影响。litter-endian:将低序字节存储在起始地址(低位字节存储在内存中低位地址)。
big-endian:将高序字节存储在起始地址(高位字节存储在内存中低位地址)。
在BIG-ENDIAN的情况下存放为:
字节号 0 1 2 3
数据 01 02 03 04
在LITTLE-ENDIAN的情况下存放为:
字节号 0 1 2 3
数据 04 03 02 01
再举一个,int a = 0x1234abcd
在BIG-ENDIAN的情况下存放为:
字节号 0 1