网络通信基础:基础位操作(一)bool 数据类型压缩处理

在网络游戏开发中,通讯包设计中需要尽量减少数据长度,位操作属于程序基础,用在通讯包数据压缩上,是非常适和的。

今天我们进行一个最简单的数据压缩处理,将8个bool压缩到1个byte里。

bool数据类型,大小为1bit,数值2进制显示0/1。

byte数据类型,大小为8bit,数值2进制显示00000000/11111111。

普通网络传输时,1个bool数据类型占据1字节,我们今天要做的是将8个bool数据类型压入1个字节中。

在这个示例中,取出bool值用了一个相对简单的方法,大家可以尝试用其他方法来取值,类似的例子很多。

 
  
using System;

public class 基础位操作
{
private const Int32 DEFAULT_BOOLS_LENGTH = 8 ;

private static byte 字节数据 = 0 ;

private static void 将布尔数据压入字节( bool 布尔数据,Int32 位索引)
{
int cache = 布尔数据 ? 1 : 0 ;
字节数据
|= ( byte )(cache << 位索引);
}

private static bool 从字节读取布尔数据(Int32 位索引)
{
byte cache = ( byte )( 1 << 位索引);
return cache == (cache & 字节数据);
}

public static void 测试函数()
{
// 初始化测试布尔数组
Console.WriteLine( " 初始化测试布尔数组 " );
bool [] bools = new bool [DEFAULT_BOOLS_LENGTH];
for ( int i = 0 ; i < DEFAULT_BOOLS_LENGTH; i ++ )
{
bools[i]
= i % 2 == 0 ;
Console.WriteLine(
" 当前是第{0}个布尔数据,值-> {1} " , i + 1 , bools[i]);
}
Console.WriteLine();
// 压入字节
Console.WriteLine( " 压入字节 " );
for ( int i = 0 ; i < DEFAULT_BOOLS_LENGTH; i ++ )
{
将布尔数据压入字节(bools[i], i);
}
Console.WriteLine(
" 输出2进制字节数据-> {0} " , Convert.ToString(字节数据, 2 ));
Console.WriteLine();
// 取出布尔数据
Console.WriteLine( " 取出布尔数据 " );
for ( int i = 0 ; i < DEFAULT_BOOLS_LENGTH; i ++ )
{
Console.WriteLine(
" 当前是第{0}个布尔数据,值-> {1} " , i + 1 , 从字节读取布尔数据(i));
}
}
}

输出结果打印图片:

2011062917485672.jpg

下一篇:

网络通信基础:基础位操作(二)自定义DateTime数据类型

转载于:https://www.cnblogs.com/zhangyang126/archive/2011/06/29/2093627.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值