繁体   English   中英

C#处理十六进制值和二进制转换

[英]C# dealing with HEX values, and binary conversion

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

  1. 有HEX命名空间吗?
  2. 除了使用字符串外,还有什么方法可以代表十六进制?

因为我需要计算零和一的数量(对于某些测试,我正在执行), 无需将其转换为二进制。 因此,只要看起来像十六进制一样,它的外观就无关紧要。

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

十六进制,二进制和十进制是同一对象的不同面,即整数。

通过以下方式将十六进制解析为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函数。

十六进制(base-16),十进制(base-10),八进制(base-8)等对计算机毫无意义 想要让计算机“与十六进制一起工作”是没有意义的。

处理原始数据的最合适的数据格式是诸如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

您还不清楚输入和输出要求是什么,以及这种家庭作业的问题,但是:

        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);

您可能正在寻找BitArray

这是一些“手动”方法

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM