C#处理HEX值和二进制转换

时间:2012-05-28 06:44:34

标签: c# namespaces binary hex

有没有办法处理HEX值(例如XORing值和移位字节) 我需要整个程序只处理HEX,如果输入是二进制的,则将其转换为HEX。

  1. 是否有HEX名称空间?
  2. 有没有办法表示除了使用字符串之外的HEX?
  3. 因为我需要计算零和1的数量(对于我正在执行的一些测试),没有需要将其转换为二进制。所以只要有一种方法可以将它作为HEX来处理它并不重要。

    我需要知道可能性和我的选择。

5 个答案:

答案 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正是您要找的。

答案 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);
}