HEX値を処理する方法はありますか(たとえば、値のXORとバイトのシフトなど)、プログラム全体でHEXのみを処理する必要があり、入力がバイナリの場合はHEXに変換する必要があります。
- HEX名前空間はありますか?
- 文字列を使用する以外に HEX を表す方法はありますか?
0 と 1 の数を数える必要があるため (一部のテストでは、実行している)、バイナリに変換する必要はありません。HEXとして扱える方法があれば見た目はどうでもいい。
可能性と選択肢を知る必要があります。
HEX値を処理する方法はありますか(たとえば、値のXORとバイトのシフトなど)、プログラム全体でHEXのみを処理する必要があり、入力がバイナリの場合はHEXに変換する必要があります。
0 と 1 の数を数える必要があるため (一部のテストでは、実行している)、バイナリに変換する必要はありません。HEXとして扱える方法があれば見た目はどうでもいい。
可能性と選択肢を知る必要があります。
16 進数、2 進数、および 10 進数は、同じオブジェクト、つまり整数の異なる面です。
16 進数から int への解析は次のように行われます。
int i = int.Parse( "FFFFFF", System.Globalization.NumberStyles.HexNumber );
int を 16 進文字列に変換するには、次のようにします。
string s = i.ToString("x");
C# で数値を定義するには、16 進数表記を使用します。
int i = 0xFFFFFF;
BitArrayは、バイトの格納にも使用できます。AND、OR、XOR、および NOT 関数があります。
16進数(基数16)、10進数(基数10)、8進数(基数8)などは、コンピューターにとって何の意味もありません。コンピュータを「HEXで」動作させたいのは...意味がありません。
生データを操作するための最も適切なデータ形式は、byte
(おそらく)などのプリミティブ、または(おそらくより良い) /byte[]
などのより大きなコンポジット(で複数の値を操作できるようにすることで、パフォーマンスを大幅に節約できます)です。同時に)。もちろん、 (私はお勧めしませんが)作業することに決めた場合、「バイナリビットカウント」などの場合は、0〜のそれぞれに設定されたビット数を事前に計算するだけで、文字レベルで処理できます。 9、AF、およびその値に対してルックアップを実行するだけです。int
long
string
いいえ、冗長になるため、「HEX」名前空間はありません。16進数は単なる数値です; 私たちの心の弱い肉付きの良い人間がそれについてどのように考えていても、その数は同じ数です。同様に、同様の事前生成されたルックアップを使用して、番号との間で変更したり、オンザフライで次の方法を使用したりできます。
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);
ここにいくつかの「手動」アプローチがあります
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);
}
おそらくBitArray
あなたが探しているものです。