如何在c#中将十六进制值转换为位位置[BitMapping]

本文关键字:位置 BitMapping 转换 十六进制 | 更新日期: 2023-09-27 18:04:25

我的问题是:

我有一个数组,更准确地说是一个dictionary<int,string>,其中KEY INT是一个十六进制值,字符串是该位的含义。如:

Key,    Value
1       Cat
2       Dog
4       Ant
8       
10
20
40
80      Whale
...

我需要将十六进制值转换为位位置。即:

Bit
1      Cat
2      Dog
3      Ant
8      Whale

如何在c#中实现?

如何在c#中将十六进制值转换为位位置[BitMapping]

我不确定你到底想要什么,但是你考虑过使用enum吗?

enum MyEnum
{
    Cat = 1,
    Dog = 2,
    Ant = 4,
    Whale = 8
};

如果你有一个十六进制字符串,把它转换成int型,然后你就可以知道哪些位是开的,哪些是关的。

转换为字符串:

string hexString = "80";
int hexInt = Convert.ToInt32(hexString, 16);

检查第n位:

// Let's say you want to see if the 8th bit is on.
if (((1 << 7) & hexInt) > 0)
{
    // our 8th bit is on
}
else
{
    // our 8th bit is off
}

我建议创建一个检查第n位的方法,如下所示:

public bool checkBit(int bitPosition, int value)
{
    // returns true if bit is on, else false
    return (((1 << bitPosition) & value) > 0);
}

注意第一个位的位置是0。所以无论你想检查哪个位,减去1。

同样,仍然不确定你想要什么,但如果你想获得第n位的十六进制值。你可以这样做:

// remember that the first bit position will be 0.
public string getHexStringForBitPosition(int bitPosition)
{
     // we can't go higher than 64.
     if (bitPosition > 63)
         return "0";
     ulong myVal = 1 << bitPosition;
     return myVal.ToString("X");
}