C#では、最初の10ビットが10進数値を表し、次の6が異なる10進数値を表す2バイトを設定するにはどうすればよいですか?2ビットの10ビットを修正する
最初の値が '8'(最初の10ビット)で2番目の値が '2'(残りの6ビット)の場合、バイト配列の中で '0000001000 000010'にする必要があります。
ありがとうございます!あなたはバイト配列でそれを必要とする場合 広告
C#では、最初の10ビットが10進数値を表し、次の6が異なる10進数値を表す2バイトを設定するにはどうすればよいですか?2ビットの10ビットを修正する
最初の値が '8'(最初の10ビット)で2番目の値が '2'(残りの6ビット)の場合、バイト配列の中で '0000001000 000010'にする必要があります。
ありがとうございます!あなたはバイト配列でそれを必要とする場合 広告
UInt16 val1 = 8;
UInt16 val2 = 2;
UInt16 combined = (UInt16)((val1 << 6) | val2);
することは、あなたはBitConverter.GetBytes
methodに結果を渡すことができます。オーバーフローのいずれかの種類を占めていない
byte[] array = BitConverter.GetBytes(combined);
int val1 = 8;
int val2 = 2;
// First byte contains all but the 2 least significant bits from the first value.
byte byte1 = (byte)(val1 >> 2);
// Second byte contains the 2 least significant bits from the first value,
// shifted 6 bits left to become the 2 most significant bits of the byte,
// followed by the (at most 6) bits of the second value.
byte byte2 = (byte)((val1 & 4) << 6 | val2);
byte[] bytes = new byte[] { byte1, byte2 };
// Just for verification.
string s =
Convert.ToString(byte1, 2).PadLeft(8, '0') + " " +
Convert.ToString(byte2, 2).PadLeft(8, '0');
:
private static byte[] amend(int a, int b)
{
// Combine the datum into a 16 bits integer
var c = (ushort) ((a << 6) | (b));
// Fragment the Int to bytes
var ret = new byte[2];
ret[0] = (byte) (c >> 8);
ret[1] = (byte) (c);
return ret;
}
ushort value = (8 << 6) | 2;
byte[] bytes = BitConverter.GetBytes(value);
は、10ビットまたは10ビットのことですか? ;) – demoncodemonkey
@demoncodemonkey:あなたは 'バイトかビット'を意味しますか? :) – sll
私には宿題のような匂いがします。 –