2016-07-04 31 views
2

私は小さなプロジェクトで作業し、バイト配列(後でソケットに送られる)に4 int型を格納する必要があります。バイト配列にintを格納する

これはコードです:

 int a = 566;   
     int b = 1106; 
     int c = 649; 
     int d = 299; 
     byte[] bytes = new byte[16]; 

     bytes[0] = (byte)(a >> 24); 
     bytes[1] = (byte)(a >> 16); 
     bytes[2] = (byte)(a >> 8); 
     bytes[3] = (byte)a; 

私は、最初の値のビットをシフトし、私はそれをバック取り出すことになりましたかどうかはわかりません...逆のプロセスを実行します。

もし私が何かを逃したら私は再びそれを説明することがうれしいでしょう私の質問が晴れていることを願っています。おかげさまで

+6

BitConverter.GetBytes(...)を使用し、他の方向では 'BitConverter.ToInt32(...) 'を使用します –

+0

@x ...しかし、私はこの配列に4バイトを挿入する必要があります。私の質問.BitConvertorは、新しいバイト配列を返します、私はそれをより複雑にしたいとは思わないし、両方の4バイト[]配列をマージするには 'BitConvertor'から取得します。 – Slashy

+0

これは意味ですか? 'int b = bytes [0] << 24 |バイト[1] << 16 |バイト[2] << 8 |バイト[3] '? –

答えて

2

この表現を使用し、バックアウトバイト配列からInt32を抽出するには:

int b = bytes[0] << 24 
     | bytes[1] << 16 
     | bytes[2] << 8 
     | bytes[3]; // << 0 

ここで示している.NET Fiddleです。

2

は、あなたがこのようにそれを行うことができ、返信コメントあなた次第:

int a = 10; 
byte[] aByte = BitConverter.GetBytes(a); 

int b = 20; 
byte[] bByte = BitConverter.GetBytes(b); 

List<byte> listOfBytes = new List<byte>(aByte); 
listOfBytes.AddRange(bByte); 

byte[] newByte = listOfBytes.ToArray(); 
+0

それはまさに私がやりたくないものです。単純なビット操作や何かがあるソリューションはありませんか? @x ...私はまた、..効率を探しています。リアルタイムプログラムのためには、私は本当に低レベルのものを使いたいと思っています。 – Slashy

+0

C/C++のやり方でビットシフトしたいのですか? –

+0

ビットシフトはc/C++に関連するだけではありません.. haha​​ – Slashy

0

あなたはバイト配列をラップして、配列に項目を書き込むためにBinaryWriterを使用するMemoryStreamを使用して、BinaryReaderにすることができます配列から項目を読み込みます。

サンプルコード:

int a = 566; 
int b = 1106; 
int c = 649; 
int d = 299; 

// Writing. 

byte[] data = new byte[sizeof(int) * 4]; 

using (MemoryStream stream = new MemoryStream(data)) 
using (BinaryWriter writer = new BinaryWriter(stream)) 
{ 
    writer.Write(a); 
    writer.Write(b); 
    writer.Write(c); 
    writer.Write(d); 
} 

// Reading. 

using (MemoryStream stream = new MemoryStream(data)) 
using (BinaryReader reader = new BinaryReader(stream)) 
{ 
    a = reader.ReadInt32(); 
    b = reader.ReadInt32(); 
    c = reader.ReadInt32(); 
    d = reader.ReadInt32(); 
} 

// Check results. 

Trace.Assert(a == 566); 
Trace.Assert(b == 1106); 
Trace.Assert(c == 649); 
Trace.Assert(d == 299); 
関連する問題