记录十六进制值的位

本文关键字:十六进制 记录 | 更新日期: 2023-09-27 18:11:42

我有一些十六进制值,我需要翻译,但徘徊如果有一个快速的方法这样做,作为一个例子,11000000或0xC0需要翻转到00000011或0x03,我不是这种类型的操作的名称,但希望存在。

记录十六进制值的位

愚蠢的实现只是为了好玩:

internal class Program
{
    private static void Main(string[] args)
    {
        byte b1 = 0xc0;
        IEnumerable<bool> bits = GetBits(b1);
        byte b2 = GetByte(bits);
        byte b3 = GetByte(bits.Reverse());            
    }
    private static IEnumerable<bool> GetBits(byte b)
    {
        for (int i = 0; i < 8; i++)
        {
            yield return (b & 0x80).Equals(0x80);
            b = Convert.ToByte((b << 1) & 0xff);
        }
    }
    private static byte GetByte(IEnumerable<bool> bits)
    {
        byte b = 0x00;
        foreach (bool bit in bits)
        {
            b = Convert.ToByte((b << 1) & 0xff);
            if (bit) b = Convert.ToByte((b | 0x01) & 0xff);
        }
        return b;
    }
}