总结 2038问题和字节序
来源:互联网 发布:linux more 显示行号 编辑:程序博客网 时间:2024/05/19 02:00
1、2038问题
在vs2005之前的time_t 是32位,即:
time(0)返回系统从1970年1月1日0时0分0秒到当前的秒数,
因为time_t是32位长,所以最大能表示到2038年1月18日,再大则溢出。
在vs2005及更高的版本中,time_t和time(0)等相关数据默认都升级为64位,
若仍旧想使用32位格式存储,可以定义宏_USE_32BIT_TIME_T或强制截断。
最好使用64位,尽管多了一倍的存储空间,但是系统在时间问题上没有了2038的后患。
2、字节序问题
字节序是一些内定数据类型如int、short等的高低字节在内存中存放的顺序,
有BIG-ENDIAN(MSB到LSB)、LITTLE-ENDIAN(LSB到MSB)两种,
字节序依赖于于CPU、编程语言和网络等环境。
1、跟CPU有关,每一种CPU不是BIG-ENDIAN就是LITTLE-ENDIAN。
IA架构的CPU中是Little-Endian,而PowerPC、SPARC和Motorola处理器是Big-Endian,
这其实就是所谓的主机字节序。
2、而网络字节序是指数据在网络上传输时是大头还是小头的,在Internet的网络字节序是BIG-ENDIAN。
3、编程语言JAVA在其虚拟机中多字节类型数据的存放顺序是BIG-ENDIAN;
C/C++语言编写的程序里数据存储顺序是跟编译平台所在的CPU相关的。
4、所以在用C/C++写通信程序时,在发送数据前务必用htonl和htons去把整型和短整型的数据进行从主机字节序
到网络字节序的转换,而接收数据后对于整型和短整型数据则必须调用ntohl和ntohs实现从网络字节序到主机字节序
的转换。如果通信的一方是JAVA程序、一方是C/C++程序时,则需要在C/C++一侧使用以上几个方法进行字节序的转换,
而JAVA一侧,则不需要做任何处理,因为JAVA字节序与网络字节序都是BIG-ENDIAN,只要C/C++一侧能正确进行转换即
可(发送前从主机序到网络序,接收时反变换)。如果通信的双方都是JAVA,则根本不用考虑字节序的问题了。
如果两边都是自己开发的c++系统不考虑服务开放也可以忽略字节序问题,否则就要考虑字节序问题了。
3、更正了两个语文错误
“堂吉诃德”的“诃”读“he一声”而不读“ke”
成语“乐此不疲”而不是“乐此不彼”
- 总结 2038问题和字节序
- 关于大小端问题和字节序问题的一些总结
- 字节对齐问题总结
- 主机和网络字节序总结
- 项目开发中问题总结:网络字节序
- 数据存储方式、传输方式、字节序问题总结
- 字节序总结
- 关于大小端序和字节对齐的总结
- 字节序问题
- 字节序的问题
- 字节序问题
- 字节序问题
- 字节序问题
- 字节序问题
- 字节序的问题
- 字节序问题
- 字节序问题
- 字节序问题
- Windows CE 6.0 安装顺序
- IP寻址与子网划分网管员要知道什么
- Linux文件系统
- uClinux 启动过程详细分析
- android进程间通信:使用AIDL
- 总结 2038问题和字节序
- Linux系统启动
- 嵌入式系统 Boot Loader 技术内幕
- 反省
- nginx+tomcat集群负载均衡(实现session复制)
- jQuery学习之:jqGrid表格插件——从servlet获得数据
- 新的开始
- 关于VS2008下提示找不到MSVCP90D.dll的解决办法
- 周云的FLASH小游戏开发教室