如何在C#中将一个十六进制值转换成位位置[BitMapping]?
How to transform an hexadecimal value into a bit position [BitMapping] in C#?
我的问题是:
我有一个数组,更准确地说是一个 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# 中做到这一点?
谢谢大家
我不确定你到底想要什么,但你考虑过使用 enum 吗?
enum MyEnum
{
Cat = 1,
Dog = 2,
Ant = 4,
Whale = 8
};
如果你有一个十六进制字符串,把它转换成一个整数,然后你就可以算出哪些位是开的,哪些是关的。
转换为字符串:
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");
}
我的问题是:
我有一个数组,更准确地说是一个 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# 中做到这一点?
谢谢大家
我不确定你到底想要什么,但你考虑过使用 enum 吗?
enum MyEnum
{
Cat = 1,
Dog = 2,
Ant = 4,
Whale = 8
};
如果你有一个十六进制字符串,把它转换成一个整数,然后你就可以算出哪些位是开的,哪些是关的。
转换为字符串:
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");
}