这段时间写了一个简单的游戏网络框架,里面套接字收发自己实现了一个Buffer,今天零散时间想实现一下Buffer提供read_int和write_int方法,大致代码如下
int buffer::read_int(void)
{
// 循环以BYTE位的方式填充整形
int value = _buffer[_start_offset++];
for (size_t i = 1; i < sizeof(int); i++) {
value = value << 8;
value |= _buffer[_start_offset++];
}
return value;
}
void buffer::write_int(int value)
{
// 循环以BYTE位的方式写入缓存
for (int i = sizeof(int)-1; i >= 0; i--)
_buffer[_valid_offset++] = ((value >> (i * 8)) & 0xFF);
}
首先先解释一下为什么要这样写,这样实现为了避免产生大小端问题,因为我们统一采用上面的读取和写入方法,肯定不会有大小端问题
这里简单解释一下大小端,若想详细了解,百度一下你会知道的更多,下面引用百度百科中的两句话
所谓的大端模式,是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中
所谓的小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中
举个例子,可能会更好理解,请拿出桌面的计算器
十进制&#x