socket通信时尽量使用stdint.h中定义的整数类型
2013-02-28 23:28
369 查看
今天在写一个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
排查了很久后找到了原因,客户端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
相关文章推荐
- socket通信框架mina使用详解
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- JavaScript使用prototype定义对象类型(转)[
- 使用typedef语句定义数组类型
- CocoaAsyncSocket 网络通信使用之http协议测试(三)
- Android 使用socket实现两个真机之间的通信
- 使用typedef关键字进行类型定义
- 使用@RequestMapping 定义处理器函数-支持的形参类型
- 使用 Socket 通信实现 FTP 客户端程序(一)
- 使用Socket进行通信
- Java Socket实战之七 使用Socket通信传输文件
- QT 定义自己的类型 注册和使用
- 让VC、BCB支持C99的整数类型(stdint.h、inttypes.h)(兼容GCC)
- 在OpenGL中使用整数类型纹理进行计算
- 使用NIO实现非阻塞Socket通信
- 在Silverlight中使用Socket进行通信(2)SL与Socket Server进行文本交换
- SQL 用户定义表类型,在存储过程里使用表类型,表参数作参数
- nginx 和 php-fpm 通信使用unix socket还是TCP,及其配置
- 使用TCP/IP的套接字(Socket)进行通信