2

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

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

因为我需要计算零和一的数量(对于我正在执行的一些测试),无需将其转换为二进制。所以不管它看起来如何,只要有一种方法可以将它作为 HEX 来处理。

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

4

5 回答 5

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 功能。

于 2012-05-28T06:56:42.370 回答
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);
于 2012-05-28T13:51:30.433 回答
1

十六进制(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
于 2012-05-28T07:10:27.730 回答
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);
}
于 2013-08-03T17:25:35.397 回答
0

可能BitArray是您正在寻找的。

于 2012-05-28T06:52:03.603 回答