今天 面试 C++ 程序员 遇到的笔试题其中一个。
如何把一个int类型的变量放入一个buffer中,和从buffer中取出一个int变量。要求buffer在不同平台之间通过网络传输,获取的int数据是一样的。请写出两种方...
如何把一个int类型的变量放入一个buffer中,
和从buffer中取出一个int变量。
要求buffer在不同平台之间通过网络传输,获取
的int数据是一样的。请写出两种方法,
一种为二进制的格式,一种是文本的格式。
int WriteIntData(int aData, char* aBuffer)
int WriteIntText(int aData, char* aBuffer)
int ReadlntData(int aData, const char* aBuffer)
int ReadlntText(int aData, const char* aBuffer) 展开
和从buffer中取出一个int变量。
要求buffer在不同平台之间通过网络传输,获取
的int数据是一样的。请写出两种方法,
一种为二进制的格式,一种是文本的格式。
int WriteIntData(int aData, char* aBuffer)
int WriteIntText(int aData, char* aBuffer)
int ReadlntData(int aData, const char* aBuffer)
int ReadlntText(int aData, const char* aBuffer) 展开
1个回答
展开全部
思路:
网络传输数据都是字节流,一个整型需要4个字节才能完成传输,而把整数转化为字符串需要更多的字符,比如12345需要5个字节。
文本格式:
相对简单但比较耗费带宽。将整型利用库函数转化为相应的进制字符串,传输过去后进行直接处理。12345转换成字符串“12345”,收到后借助库函数再转换就可以了
二进制:
需要将4个字节进行发送,问题是:
不同平台的问题在于大端小端问题,所以必须保证收到的字节统一处理,解决方案就是自己定义自己的大端或小端方向,
简单的做法就是定义4字节的字符数组,将其低位到高位(或者相反)每一个字节存至char数组。传输过去后,从数组中取出来,取出来分别移位求和即可。
网络传输数据都是字节流,一个整型需要4个字节才能完成传输,而把整数转化为字符串需要更多的字符,比如12345需要5个字节。
文本格式:
相对简单但比较耗费带宽。将整型利用库函数转化为相应的进制字符串,传输过去后进行直接处理。12345转换成字符串“12345”,收到后借助库函数再转换就可以了
二进制:
需要将4个字节进行发送,问题是:
不同平台的问题在于大端小端问题,所以必须保证收到的字节统一处理,解决方案就是自己定义自己的大端或小端方向,
简单的做法就是定义4字节的字符数组,将其低位到高位(或者相反)每一个字节存至char数组。传输过去后,从数组中取出来,取出来分别移位求和即可。
追问
只有思路 没有 代码 吗 ? 求代码 ,大神
追答
整形转换成字符串,借助itoa函数,反过来就是atoi函数,都是标准库的
整型四字节转换,借助0x000F
比如int a;
a & 0xFF,可以得到a的二进制低位1一个字节
a >> 8,右移8位,再与运算,得到第二个字节。
反过来的话类似
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询