高分求解 利用一个字节的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) --------------------编程问答-------------------- 测试运行没问题,注意数据大小,别太大!
--------------------编程问答-------------------- /// <summary>
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>
/// <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);
} --------------------编程问答--------------------
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#