以十六进制值记录位

时间:2014-07-06 14:37:39

标签: c# binary hex

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

1 个答案:

答案 0 :(得分:0)

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

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;
    }
}