读书人

一组棘手的byte数组循环

发布时间: 2012-01-30 21:15:58 作者: rapoo

一组棘手的byte数组循环,求助
小弟写了个开头,写不下去,,希望高手可以帮助写下去
THS

要求是这样的:
字节数组总长度L是已知的,编号为两个字节,编号的内容(字节长度)是根据前面两个字节编号决定的,,请问如何在不超出字节数组总长度L的情况下,将各编号的内容取出(处理).....该循环主要是要取出各编号的具体内容.


/// <summary>
/// 根据数据标识编码返回数据内容的长度。ItemID,标识编码
/// </summary>
/// <param name= "ItemID "> </param>
/// <returns> </returns>
private int GetLen(string ItemID)
{
switch (ItemID)
{
case "902F ":
return 8;

case "916F ":
return 16;

case "902F ":
return 8;

//.....................................
default:
break;
}

}


/// <summary>
/// ItemData:数据内容字节帧,totalLen:数据内容长度
/// </summary>
/// <param name= "ItemData "> </param>
/// <param name= "totalLen "> </param>
private void ProcTermResponse(byte[] ItemDatas, int totalLen)
{
int index = 0;//记录处理位置;
int ItemDataLen;//数据项长度

while (index < totalLen)


{
//数据项编号
string strItemID = GetDataItemNO(ItemDatas[index], ItemDatas[index + 1]);
ItemDataLen = GetLen(strItemID);

//----------------
//对单个数据项内容进行处理,单个数据内容为,ItemDatas[index+2] ~ ItemDatas[index+2+ItemDataLen -1]
//....................
//----------------
}
}

[解决办法]
太乱
[解决办法]
没有看明白....给个数组的例子看看,

看样子好像编号同时又是别的编号所属的内容..
[解决办法]
标识和内容是在一个byte[] 中,如果是,用下面的方法。
byte[] yourbyte = ??;
{
byte[] btl = new byte[2];
int iL = 0;

Buffer.BlockCopy(yourbyte,0,bt1,0,2);

iL = BitConverter.ToInt16(bt1,0);

byte[] bts = new byte[iL];

if(iL > = yourbyte.Length-2)
{
Buffer.BlockCopy(yourbyte,2,bts,0,iL);
//--------bts中进行你的操作----------
}

}
[解决办法]
lz,确实,你的代码风格太乱了...............
[解决办法]
“902F” 两个字节是存不下的。

刚才以为 标识 里面存的是 内容的长度。也解释一下上面的代码:
byte[] yourbyte = ??; //原始的byte数组
{
byte[] btl = new byte[2]; //提取 标识 的byte数组
int iL = 0; //内容的 byte长度

Buffer.BlockCopy(yourbyte,0,bt1,0,2); //从原始 byte数组 提取 标识

iL = BitConverter.ToInt16(bt1,0); // btye[] -> Int32 转换

byte[] bts = new byte[iL];

if(iL > = yourbyte.Length-2)
{
Buffer.BlockCopy(yourbyte,2,bts,0,iL); //同上
//--------根据具体需求对 byte[] 进行操作---------
}
}
[解决办法]
“902F” 两个字节是存不下的。

刚才以为 标识 里面存的是 内容的长度。也解释一下上面的代码:
byte[] yourbyte = ??; //原始的byte数组
{
byte[] btl = new byte[2]; //提取 标识 的byte数组
int iL = 0; //内容的 byte长度

Buffer.BlockCopy(yourbyte,0,bt1,0,2); //从原始 byte数组 提取 标识

iL = BitConverter.ToInt16(bt1,0); // btye[] -> Int32 转换

byte[] bts = new byte[iL];

if(iL > = yourbyte.Length-2)
{
Buffer.BlockCopy(yourbyte,2,bts,0,iL); //同上
//--------根据具体需求对 byte[] 进行操作---------
}
}

读书人网 >C#

热点推荐