[英]C# dealing with HEX values, and binary conversion
有沒有一種方法來處理HEX值(例如XORing值和移位字節),我需要整個程序僅處理HEX,並且如果輸入是二進制的,則將其轉換為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函數。
十六進制(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.