当前位置:编程学习 > C#/ASP.NET >>

高分求解 利用一个字节的8个bit,怎么保存版本号信息

一个字节中,有8个Bit位分别是7 6 5 4 3 2 1 0
我想在这个字节中保存 X1.X2.X3,例如 1.0.3 表示版本号 为Ver1.0.3
其中其中bit7、bit6、bit5 用来存储数字X1,bit4和bit3用来存储数字X2,bit2、bit1、bit0用来存储数字X3

怎么做到给定版本号,即可构建这个字节byte??


我用程序怎么写?


--------------------编程问答-------------------- 关键是你版本的各部分数据可能为多大,需占几位存储,然后才能生产该 Byte ,否则可能无法存放你的版本数据啊! --------------------编程问答-------------------- x1(0~7) x2(0~3) X3(0~7) --------------------编程问答-------------------- 测试运行没问题,注意数据大小,别太大!


private byte getBB(string bb)
{
    //string bb = "Ver3.2.6";
    Match m = Regex.Match(bb, @"(?i)ver(?<n1>\d+)\.(?<n2>\d+)\.(?<n3>\d+)");
    byte b = 0;
    if (m.Success)
    {
        byte b1 = byte.Parse(m.Groups["n1"].Value);
        byte b2 = byte.Parse(m.Groups["n2"].Value);
        byte b3 = byte.Parse(m.Groups["n3"].Value);
        b = (byte)((b1 << 5) | (b2 << 3) | b3);
    }
    return b;
}

--------------------编程问答--------------------  /// <summary>
        /// 获取数据中某一位的值
        /// </summary>
        /// <param name="input">传入的数据类型,可换成其它数据类型,比如Int</param>
        /// <param name="index">要获取的第几位的序号,从0开始</param>
        /// <returns>返回值为-1表示获取值失败</returns>
        private int GetbitValue(byte input,int index)
        {
            if (index > sizeof(byte))
            {
                return -1;
            }
            //左移到最高位
            int value = input << (sizeof(byte) - 1 - index);
            //右移到最低位
            value = value >> (sizeof(byte) - 1);
            return value;
        }


    /// <summary>
        /// 设置某一位的值
        /// </summary>
        /// <param name="data"></param>
        /// <param name="index">要设置的位, 值从低到高为 1-8</param>
        /// <param name="flag">要设置的值 true / false</param>
        /// <returns></returns>
        byte set_bit(byte data, int index, bool flag)
        {
            if (index > 8 || index < 1)
                throw new ArgumentOutOfRangeException();
            int v = index < 2 ? index : (2 << (index - 2));
            return flag ? (byte)(data | v) : (byte)(data & ~v);
        } --------------------编程问答--------------------
引用楼主 yesbar 的回复:
一个字节中,有8个Bit位分别是7 6 5 4 3 2 1 0
我想在这个字节中保存 X1.X2.X3,例如 1.0.3 表示版本号 为Ver1.0.3
其中其中bit7、bit6、bit5 用来存储数字X1,bit4和bit3用来存储数字X2,bit2、bit1、bit0用来存储数字X3

怎么做到给定版本号,即可构建这个字节byte??


我用程序怎么写?


byte ver = 0;
ver |= (X1 & 0x07 << 5 );
ver |= (X2 & 0x03 << 3 );
ver |= (X2 & 0x07 );

这样就可以实现你的要求了 --------------------编程问答-------------------- 楼上正解。。。 --------------------编程问答-------------------- 一个字节中,有8个Bit位分别是7 6 5 4 3 2 1 0
我想在这个字节中保存 X1.X2.X3,例如 1.0.3 表示版本号 为Ver1.0.3
其中其中bit7、bit6、bit5 用来存储数字X1,bit4和bit3用来存储数字X2,bit2、bit1、bit0用来存储数字X3

怎么做到给定版本号,即可构建这个字节byte??

----------------------------
bit是位,2进制中一个位只能是0或是1,
1.0.3
这里.分割的三个数字都每个是一个字节才可以。否则不可能用一个位表示3. --------------------编程问答-------------------- 3个bit最多只能表示7,如果最后一位版本号变成8就表示不了了阿
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,