2018-08-23 【c#】位运算,以及byte数组转为16进制字符串

程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。

2018-08-23 【c#】位运算,以及byte数组转为16进制字符串_第1张图片
位运算.png

一.移位运算(暂时还不知道这么做有何意义,先明白是怎样操作的吧)

https://blog.csdn.net/wangdamingll/article/details/53434098

1.1 >>


2018-08-23 【c#】位运算,以及byte数组转为16进制字符串_第2张图片
image.png

1.化十进制数为对应的二进制数,对应指格式对应
2.通通右移,正数左补0,负数左补1,右边丢弃
3.化为十进制数
例:
int a=8;a=a>>1;
1.a=0 000 0000 0000 1000
2.右移一位后:a= 0 000 0000 0000 100
3.补0:a=0 000 0000 0000 0100
4.化为十进制数:a=4

1.2 <<

2018-08-23 【c#】位运算,以及byte数组转为16进制字符串_第3张图片
image.png

将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。(按阶叠乘)

  1. 1001 0010 = 15
  2. 左移一位,15*2 = 30
  3. 左移两位,30*2 = 60
  4. 左移三位,60*2 = 120

二.按位与(或,异或,取反同理)

2018-08-23 【c#】位运算,以及byte数组转为16进制字符串_第4张图片
image.png

三.byte[] 和16进制字符串转换

    public static String BytesToHex(byte[] bytes, int size = 0)
    {
        
        if (bytes == null || bytes.Length == 0)
        {
            return null;
        }

        if (size <= 0 || size > bytes.Length)
        {
            size = bytes.Length;
        }

        char[] buf = new char[2 * size];
        for (int i = 0; i < size; i++)
        {
            byte b = bytes[i];
            buf[2 * i + 1] = digits[b & 0xF];
            b = (byte)(b >> 4);
            buf[2 * i + 0] = digits[b & 0xF];
        }
        return new String(buf);
    }

    public static byte[] HexToBytes(String s)
    {

        int len = s.Length;
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2)
        {

            data[i / 2] = (byte)((CharToValue(s[i]) << 4) + (CharToValue(s[i + 1])));
        }
        return data;
    }

你可能感兴趣的:(2018-08-23 【c#】位运算,以及byte数组转为16进制字符串)