こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

byte配列の途中から2個ずつintに移すには?

byte配列の途中から2個ずつintに移すには?
Byte[] recvData={02:03:04:05:06:01:00:02:00:FF:FF:05}
int nCount; =3;//データn個ください。
List<int> ValueList = new List<int>();//格納用
for (int i = 0; i < nCount; i++)
{
  //[0]~[4]までヘッダ+サブヘッダ。データは[5]から2byteずつ
ValueList.Add(recvData[5 + i * 2] | (recvData[6 + i * 2] << 3));
};

という感じで、溜まったbyte配列の受信データから
0001、0002、65535とデータ部分を2byteずつ取り出したいのですが
もうちょっとC#なら簡潔な書き方ってあるのでしょうか?

投稿日時 - 2010-09-07 22:50:37

QNo.6166285

困ってます

質問者が選んだベストアンサー

recvData[5]のアドレスを使って、unsigned short型ポインタ使えばいいのでは?

投稿日時 - 2010-09-08 00:14:54

補足

すみません。丸1日かかり、自己解決しました。
BitConverter.ToUInt16(recvData,i*2)

投稿日時 - 2010-09-08 23:48:36

ANo.1

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

ビルドするときはunsafeオプションをつけて
byte[] test = { 2, 3, 4, 5,6, 1, 0, 2, 0, 255, 255, 5 };
int x;
unsafe
{
for(int i=0;i<3;i++){
int* xp=&x;
byte* p = (byte*)xp;
*p = test[5 + i * 2];
++p;
*p = test[5 + i * 2+1];
Console.WriteLine("{0}", x);
}
}
Console.ReadLine();

参考URL:http://msdn.microsoft.com/ja-jp/library/ct597kb0%28VS.80%29.aspx

投稿日時 - 2010-09-08 00:16:52