今天在写一个socket通信时碰到一个诡异的问题。客户端C发送一个long类型的数据,服务端S接收后打印,总是错误的数值。
排查了很久后找到了原因,客户端C是32位的操作系统,而服务端是64位的操作系统。
在这两种操作系统中long数据类型所占的内存大小不一致,为了避免这种情况,我们需要用到在头文件stdint.h中定义的一些数据类型。
下面我们详细介绍一下关于stdint.h的一些内容。
stdint.h是什么
stdint.h是c99中引进的一个标准C库的头文件.
stdint.h干什么
stdint.h中定义了一些整数类型,规则如下(其中N可以为8,16,32,64)
intN_t, int_leastN_t, int_fastN_t表示长度为N位的整型数;
uintN_t, uint_leastN_t, uint_fastN_t表示长度为N位的无符号整型数 ;
stdint.h中的常量,定义以上各类型数的最大最小值(其中N可以为8,16,32,64)
INTN_MIN, UINTN_MIN, INTN_MAX, UINTN_MAX ;
INT_LEASEN_MIN, INT_LEASEN_MAX ;
INT_FASTN_MIN, INT_FASTN_MAX ;
以上类型的C++类型定义等
大数输出
int64_t数的输出:%lld ;
uint64_t数的输出:%llu ;
uint64_t数十六进制输出:%llx ;
uint64_t数八进制输出:%llo ;
本文转载自:http://www.mysql100.com/c/c_error_list/2013/0227/335.html