スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

パケットを痩せさせる

ひにけにXNA様のサイトにてパケットを作る際にビットフィールドを使う記事が載っていた。

さっそく導入

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test
{
static class Bit
{
/// <summary>
/// 使い方
/// int bitfield = 0;
/// AddToBitfield( ref bitfield, 1, isAlive? 1: 0 );
/// AddToBitfield( ref bitfield, 1, isFiring? 1: 0 );
/// AddToBitfield( ref bitfield, 4, (int)species );
/// packetWriter.Write((byte)bitfield);
/// </summary>
/// <param name="bitfield">操作する変数</param>
/// <param name="bitCount">ビット数</param>
/// <param name="value">格納する値</param>
public static void AddToBitfield(ref int bitfield, int bitCount, int value)
{
bitfield <<= bitCount;//現在のビットフィールドを左シフト(「<<」演算子を使う)して、新しいフィールドを確保
bitfield |= value;//新しいビット群を設定(「|」演算子を使う)
}

/// <summary>
///使い方
/// int bitfield = PacketReader.ReadByte();
/// species = (Species)ReadFromBitfield( ref bitfield, 4 );
/// bool = ReadFromBitfield( ref bitfield, 1 ) != 0;
/// </summary>
/// <param name="bitfield">ビット単位で結合してある変数</param>
/// <param name="bitCount">何ビット取り出すか</param>
/// <returns>取り出した値</returns>
public static int ReadFromBitfield(ref int bitfield, int bitCount)
{
int value = bitfield & ((1 << bitCount) - 1);
bitfield >>= bitCount;
return value;
}
}
}


とても使いやすいしbool型を沢山送りたい場合は重宝する。
サーバー用にC++版も作っておこう。

ねよっと。

コメントの投稿

非公開コメント

プロフィール

あしゅ

Author:あしゅ
ぷぃぷぃ日常。
いつのまにか雑記ブログに。

カテゴリ
最新記事
検索フォーム
最新コメント
リンク
このブログをリンクに追加する
ブロとも申請フォーム

この人とブロともになる

カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。