有没有办法处理HEX值(例如XORing值和移位字节) 我需要整个程序只处理HEX,如果输入是二进制的,则将其转换为HEX。
因为我需要计算零和1的数量(对于我正在执行的一些测试),没有需要将其转换为二进制。所以只要有一种方法可以将它作为HEX来处理它并不重要。
我需要知道可能性和我的选择。
答案 0 :(得分:2)
Hex,binary和decimal是相同对象的不同面,即整数。
以这种方式解析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功能。
答案 1 :(得分:1)
十六进制(base-16),十进制(base-10),八进制(base-8)等对计算机来说意味着 nothing 。想让计算机“与HEX一起工作”是......毫无意义。
用于处理原始数据的最合适的数据格式是原始文件,例如byte
(可能在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
答案 2 :(得分:1)
你还没有真正清楚你的输入和输出要求是什么,以及这个家庭作业,但是:
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);
答案 3 :(得分:0)
可能BitArray
正是您要找的。 p>
答案 4 :(得分:0)
这是一些“手动”方法
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);
}