关于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;//返回数组
}
感谢您的阅读,如果您有更好的方法,请在评论区展示,若有不足,还请指出。
本文详细介绍如何进行byte数据的操作,包括转换byte为0/1数组、判断byte最高位符号、分离byte高低4位及求和,提供了实用的代码示例。
3637

被折叠的 条评论
为什么被折叠?



