首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#里的位 如何用的

2012-08-17 
C#里的位 怎么用的比如 5个字节的数据6位表示消息类型2位表示一个数30位表示一个码2位又表示一个数这样的

C#里的位 怎么用的
比如 5个字节的数据
6位表示消息类型
2位表示一个数
30位表示一个码
2位又表示一个数
这样的数据按位取值的要怎么弄呀

[解决办法]
Byte数组
[解决办法]
5字节就是40位,自己挨个取
[解决办法]

探讨

Byte数组

[解决办法]
自己弄个转换类呗
[解决办法]
Convert.ToString(XX,2)
[解决办法]
直接用位运算就行
[解决办法]
记得以前查过的,现在一找笔记,竟然找不到!哈哈
[解决办法]
C# code
static bool GetBit(int data, int bit){    int test = 1 << (bit - 1);    return (data | test) == data;}
[解决办法]
System.Collections.BitArray,或者BitConverter.ToInt64/ToUInt64然后用位运算来取值
[解决办法]
探讨

System.Collections.BitArray,或者BitConverter.ToInt64/ToUInt64然后用位运算来取值

[解决办法]
直接对齐成64位长整,不足部分补0凑数:
这对现在64位的CPU毫无压力,一秒种可以处理上亿。
C# code
namespace ConsoleApplication6{    class Program    {        static byte[] bs = { 231, 132, 120, 97, 65, 0, 0, 0 };        static void Main(string[] args)        {            ulong i64 = BitConverter.ToUInt64(bs, 0);            Console.WriteLine("{0:x}", getNumber(i64, 0, 6)); //0-6位            Console.WriteLine("{0:x}", getNumber(i64, 6, 2)); //7-8位            //.....            Console.ReadLine();        }        static ulong getNumber(ulong i64, int start, int len)        {            i64 = i64 << 64 - start - len >> 64 - len;            return i64;        }    }} 

热点排行