私は、16進文字列入力を受け取り、その入力のバイナリ値を生成するコードに取り組んでいます。16進文字列の値をバイナリで取得したら、そのバイトの個々のビットにアクセスする必要があります。
私が取り組んでいることを正確に言うことはできませんが、私はこれを言うことができます:16進文字は、いくつかのハードウェア上のレジスタの特定の選択のバイト値を表します-これは、いくつかのクランチが終了した後の出力として16進文字列を提供します数字。
構成された例として、出力値 "A2"(10100010)は、レジスター(ここでも構成されている)が次の値を持つことを意味します。
RegA RegB RegC RegD
101 0 001 0
返されるバイト値内のN個のビットにアクセスする必要があります。私が道路にぶつかったことを除いて。
これまでのところ、私は次のことを試しました。
string inputString = "F";
byte[] byteValues = new byte[inputString.Length * sizeof(char)];
System.Buffer.BlockCopy(inputString.ToCharArray(), 0, byteValues,
0, byteValues.Length);
return byteValues;
ただし、入力文字列 "F"を指定すると、このコードは4つの要素を持つバイト配列を返します。最初の要素の値は70で、残りの要素は0です。これは大文字のFのASCIIキーであり、私が望むものではありません。
私も試しました:
int tempInt = Convert.ToInt32("F", 16);
byte[] value = BitConverter.GetBytes(tempInt);
入力文字列「F」を指定すると、このコードは4つの要素を持つバイト配列を返します。1番目の要素の値は15で、残りの要素は0です。これはもっと似ていますが、バイト配列のこの1番目の要素内の個々のビットにアクセスする必要があります。
16進文字を受け取り、それをオンにして、その16進文字の正しいビット値を持つ4要素byte []を返すメソッドを提供する以外に、個々のビット情報を取得するプログラム的な方法はありますか?
これは私が意味することです:
public byte[] getByteValueForString (string inputString)
{
/* is there a better way than this? */
switch(inputString)
{
case "0":
return new byte[] {0, 0, 0, 0};
//....
case "E":
return new byte[] {1, 1, 1, 0};
case "F":
return new byte[] {1, 1, 1, 1};
}
}
//or a similar method that switches on the output
//of Convert.ToInt32(string, 16) and returns the a
//byte[] in the same manner as getByteValueForString
public bool bar ()
{
/* check the value for some representation
* of a register */
if (fooByteArray[2] == 0 & fooByteArray[3] == 0)
{
//some register, on the remote machine, is set to false
return false;
}
}
これに関する助けをいただければ幸いです。