记录十六进制值的位
本文关键字:十六进制 记录 | 更新日期: 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;
}
}