有没有办法处理十六进制值(例如,异或值和移位字节)我需要整个程序只处理十六进制,如果输入是二进制的,则将其转换为十六进制。
- 有十六进制命名空间吗?
- 除了使用字符串之外,还有其他方法可以表示 HEX 吗?
因为我需要计算零和一的数量(对于我正在执行的一些测试),而无需将其转换为二进制。所以不管它看起来如何,只要有一种方法可以将它作为 HEX 来处理。
我需要知道可能性和我的选择。
有没有办法处理十六进制值(例如,异或值和移位字节)我需要整个程序只处理十六进制,如果输入是二进制的,则将其转换为十六进制。
因为我需要计算零和一的数量(对于我正在执行的一些测试),而无需将其转换为二进制。所以不管它看起来如何,只要有一种方法可以将它作为 HEX 来处理。
我需要知道可能性和我的选择。
十六进制、二进制和十进制是同一对象的不同面,即整数。
将十六进制解析为 int 是这样完成的:
int i = int.Parse( "FFFFFF", System.Globalization.NumberStyles.HexNumber );
将 int 转换为十六进制字符串是这样完成的:
string s = i.ToString("x");
可以使用十六进制表示法在 C# 中定义数字:
int i = 0xFFFFFF;
BitArray也可用于存储字节。它确实具有 AND、OR、XOR 和 NOT 功能。
你还没有真正清楚你的输入和输出要求是什么,这很家庭作业,但是:
var x = 0x1111L;
/// number of bits that are on
var ones = 0;
/// number of bits that are off
var zeros = 0;
var bitLength = Marshal.SizeOf(x) * 8;
while (x > 0)
{
if ((x & 1) > 0)
{
ones++;
}
x >>= 1;
}
zeros = bitLength - ones;
Console.WriteLine("{0} bits are on, {1} are off", ones, zeros);
十六进制(base-16),十进制(base-10),八进制(base-8)等对计算机没有任何意义。想让计算机“使用 HEX”工作是……毫无意义。
处理原始数据最合适的数据格式是原语,例如byte
(可能在 a 中byte[]
),或者(可以说更好)在更大的复合中,例如int
/ long
(通过允许您使用多个值,可以节省很多性能同时)。当然,如果您决定使用string
(我不推荐),对于诸如“二进制位计数”之类的事情,您可以简单地通过预先计算每个 0- 中设置的位数来在字符级别处理它9,AF,并且只是针对该值进行查找。
不,没有“HEX”命名空间,因为它是多余的。十六进制只是一个数字;不管我们这些意志薄弱的肉体人类怎么想,这个数字都是一样的。同样,您可以使用类似的预先生成的查找来更改/更改数字,或通过以下方式即时更改:
int i = Convert.ToInt32("f3", 16); // hex to Int32
string hex = i.ToString("x2"); // Int32 to hex
这是一些“手动”方法
static void ConvertBinToHex(string hexadecimal)
{
if (hexadecimal.Length == 0)
return;
string binary = string.Empty;
for (int i = 0; i < hexadecimal.Length; i++)
{
switch (hexadecimal[i])
{
case '0': binary += "0000"; break;
case '1': binary += "0001"; break;
case '2': binary += "0010"; break;
case '3': binary += "0011"; break;
case '4': binary += "0100"; break;
case '5': binary += "0101"; break;
case '6': binary += "0110"; break;
case '7': binary += "0111"; break;
case '8': binary += "1000"; break;
case '9': binary += "1001"; break;
case 'A': binary += "1010"; break;
case 'B': binary += "1011"; break;
case 'C': binary += "1100"; break;
case 'D': binary += "1101"; break;
case 'E': binary += "1110"; break;
case 'F': binary += "1111"; break;
default:
break;
}
}
//remove leading zero's
binary = binary.Trim('0');
Console.WriteLine(binary);
}
可能BitArray
是您正在寻找的。