簡體   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