2012-02-24 13 views
1

C#では、最初の10ビットが10進数値を表し、次の6が異なる10進数値を表す2バイトを設定するにはどうすればよいですか?2ビットの10ビットを修正する

最初の値が '8'(最初の10ビット)で2番目の値が '2'(残りの6ビット)の場合、バイト配列の中で '0000001000 000010'にする必要があります。

ありがとうございます!あなたはバイト配列でそれを必要とする場合 広告

+1

は、10ビットまたは10ビットのことですか? ;) – demoncodemonkey

+0

@demoncodemonkey:あなたは 'バイトかビット'を意味しますか? :) – sll

+0

私には宿題のような匂いがします。 –

答えて

4
UInt16 val1 = 8; 
UInt16 val2 = 2; 
UInt16 combined = (UInt16)((val1 << 6) | val2); 

することは、あなたはBitConverter.GetBytes methodに結果を渡すことができます。オーバーフローのいずれかの種類を占めていない

byte[] array = BitConverter.GetBytes(combined); 
+0

'UInt16 combined =(val1 << 6)| val2; 'はコンパイルされません、'暗黙のうちに 'int'型を 'ushort'に変換できません。明示的な変換が存在します(キャストがありませんか?) – sll

+0

@sllキャストを追加するだけです。 –

+0

Int32からUInt16へのキャストを追加するように編集しました。 – Justin

1
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'); 
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; 
} 
0
ushort value = (8 << 6) | 2; 
byte[] bytes = BitConverter.GetBytes(value); 
関連する問題