私はHexデータを持っています
Byte[] data = new Byte[2];
data[0]=FF;
data[1]=FF;
ここで、このデータのバイナリ表現は次のとおりです。
1111 1111 1111 1111
ここでは、ビット 0 から 11 までの整数値のみを検索します。(左から右へ)しかし、最小限の複雑さで価値を見つける方法がわかりませんか?助けてください。よろしくお願いします。
私はHexデータを持っています
Byte[] data = new Byte[2];
data[0]=FF;
data[1]=FF;
ここで、このデータのバイナリ表現は次のとおりです。
1111 1111 1111 1111
ここでは、ビット 0 から 11 までの整数値のみを検索します。(左から右へ)しかし、最小限の複雑さで価値を見つける方法がわかりませんか?助けてください。よろしくお願いします。
特定のビットのみが必要な場合は、ビット マスクを使用して論理 AND を適用できます。
あなたの場合、ビットマスクは0000 1111 1111 1111(ビット0から11まで)または0FFFです。
あなたは「左から右へ」と言っているので、代わりに 1111 1111 1111 0000 (FFF0) - ビット 4 から 15 までが必要かもしれません。
short value = 0xFFFF;
value = value & 0x0FFF;
この操作により、上位 4 ビットが 0 になります。val[1] = val[1] & 0x0F
バイト配列を文字列に変換:
StringBuilder sb = new StringBuilder(ba.Length * 2);
foreach (byte b in ba)
{
sb.AppendFormat("{0:x2}", b)
}
return sb.ToString();
次に、文字列を int に解析します
int a = int.Parse("10026AB0", NumberStyles.AllowHexSpecifier);
これは基本的なことです...
「16進」データはありませんが、2バイトサイズの整数です。
疑似コードで(私はC#を流暢に話せません):
int value=data[1]<<8 | data[0];
int maskedvalue=value & 4095; // bits 0..11 inclusive set
maskedvalue は、下位 11 ビットのみが設定された値を保持するようになりました。