2012-01-09 10 views
0

バイト配列の特定の場所にint32を格納するにはどうすればよいですか?int32をバイト配列に格納

私が知る限り、BitConverter.GetBytes(値)を使用する必要があります。バイト[4]を得る。

次に、バイト[whatever_size]とオフセットがあります。

public void SetInt32(byte[] message, int offset, Int32 value) 
{ 
var value_bytes = BitConverter.GetBytes(value); 
message[offset] = value_bytes; 
} 

答えて

7

あなたはビット単位の演算を使用して直接バイトを取得することができます:

byte temp[4]; 
temp[3] = value & 0xFF; 
temp[2] = (value >> 8) & 0xFF; 
temp[1] = (value >> 16) & 0xFF; 
temp[0] = (value >> 24) & 0xFF; 
for(int i = 0; i < 4; i++) 
    message[offset+i] = temp[i]; 
+0

はあなたに感謝します!それは私がそれをやりたかったのです! – Bluebaron

+0

私はバイトに短く割り当てることができません – Bluebaron

+0

@Bluebaron:この '(byte)((value >> 24)&0xFF)のようにキャストしてください ' – Tigran

1

使用

value_bytes.CopyTo(message, offset); 

代わりの

message[offset] = value_bytes; 

messageは、あなたが他のバイト配列であると仮定するとoffsetは、コピーする場所を指定するint型です。

4

BitConverterを使用し、次にBuffer.BlockCopyまたはArray.Copyを使用して、「新しい」バイト配列の内容を別のものにコピーすることができます。

また、あなたはエンディアンを指定することができます、だけでなく、あなたが冗長アレイの作成を回避することを可能にするだけでなく、MiscUtilからEndianBitConverterコードを取ることができる:

EndianBitConverter.Little.CopyBytes(value, message, offset); 
+0

+1はこれを知らなかった。 – Tigran

関連する問題