关于byte的一些操作:取某一位和改其值,byte转为0/1数组,分离byte的高低4位【C#】

关于byte的一些操作,非常有用的。

1、将byte转为对应的0/1数组

不多说,直接看代码:

public static byte[] byteToArray(byte bt)
{
    byte[] array = new byte[8];//用于存储每位的值
    for(int i = 7; i >= 0; i--)
    {
        array[i] = (byte)(bt & 1);//强转
        bt = (byte)(bt >> 1);//右移1位
    }
    return array;
}

2、判断byte最高位的符号

在一些场景中,我们需要一位来确定某个数的符号,通常选用最高位来做符号位,如温度有正负,在保存温度数据时,需要考虑正负,所以采用最高位来作为符号位,设最高位为0时,温度为正,否则为负。如何判断呢?采用按位与的方法,只需看最高位与1相与的结果,其他位不管。

我这里采用的方式是,将byte值与0x80相与,然后与0x80相比,如果相等,则说明最高位为1否则0

代码实现判断最高位

public static byte JudgeTempPositiveOrNegative(byte b)
{
    //&是按位与之后的结果,所以最后要和本身【0x80】做比较
    if ((b & 0x80) == 0x80)//如果温度最高位是1,即为负数情况
    {
        Console.WriteLine("最高位为1");
        b = (byte)(b & 0x7F);//将b的最高位变为0,其他位不变
        Console.Write("最高位已改为0");
        return b;
    }
    else //如果温度最高位是0,为正数,则什么也不做
    {
        Console.Write("最高位为0");
        return b;
    }          
}

3、分离byte高低4位

前面用温度举例,现在继续用温度来讲,我们要解析出具体的温度值,如1100 1001,最高位为1,为负数,高4位为1100,数值位为100,对应十进制值为4;低4位为1001,对应十进制值为9。所以1100 1001在这种规则下转为十进制数为-49

代码实现分离高低4位,并存于数组中

public static int[] SeparatingHighAndLowBits(byte b)
{
    int[] HL = new int[2];//一个2位的数组,用于存获取到的高低位值
    var high = (b & 0xF0) >> 4;//高位
    var low = b & 0x0F;//低位
    HL[0] = high;
    HL[1] = low;
    return HL;//返回数组
}

要实现温度的分离,还需要使用到上面判断最高位符号的代码,这里就不操作了。

4、分离byte高低4位并求和

在我们传输数据过程中,需要校验,如果采用累加和校验方式,就要用到分离字节高低4位的方法。

只需要在上面代码中修改部分即可。

public static int SumHighAndLowBits(byte bt)
{
    var high = (bt & 0xF0) >> 4;//高位
    var low = bt & 0x0F;//低位 
    return high+low;//返回数组
}

感谢您的阅读,如果您有更好的方法,请在评论区展示,若有不足,还请指出。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值