C#中下面一段代码是什么意思,麻烦详细解释一下
publicstaticbyte[]ResolveBuffer(byte[]buffern){if(buffern[0]!='6'&&buffern[1]!='8'){r...
public static byte[] ResolveBuffer(byte[] buffern)
{
if (buffern[0] != '6' && buffern[1] != '8')
{
return null;
}
try
{
char[] bufferw = Encoding.ASCII.GetChars(buffern);
byte[] buffer = new byte[40];
for (int i = 0; i < 40; i++)
{
if (bufferw[i] < 97)
{
buffer[i] = Convert.ToByte(Convert.ToString(bufferw[i]));
}
else
{
buffer[i] = Convert.ToByte((int)bufferw[i] - 87);
}
}
byte[] transformedData = new byte[20];
for (int i = 0; i < 20; i++)
{
transformedData[i] = (byte)((buffer[i * 2] << 4) + buffer[i * 2 + 1]);
}
return transformedData;
}
catch (Exception)
{
return null;
}
}
}
} 展开
{
if (buffern[0] != '6' && buffern[1] != '8')
{
return null;
}
try
{
char[] bufferw = Encoding.ASCII.GetChars(buffern);
byte[] buffer = new byte[40];
for (int i = 0; i < 40; i++)
{
if (bufferw[i] < 97)
{
buffer[i] = Convert.ToByte(Convert.ToString(bufferw[i]));
}
else
{
buffer[i] = Convert.ToByte((int)bufferw[i] - 87);
}
}
byte[] transformedData = new byte[20];
for (int i = 0; i < 20; i++)
{
transformedData[i] = (byte)((buffer[i * 2] << 4) + buffer[i * 2 + 1]);
}
return transformedData;
}
catch (Exception)
{
return null;
}
}
}
} 展开
2个回答
展开全部
public static byte[] ResolveBuffer(byte[] buffern)
{
if (buffern[0] != '6' && buffern[1] != '8')//buffern第一个不是6 第二个不是8
{
return null;
}
try
{
char[] bufferw = Encoding.ASCII.GetChars(buffern);//将buffern转换为char数组
byte[] buffer = new byte[40];//初始化一个40长度的数组
for (int i = 0; i < 40; i++)//循环
{
if (bufferw[i] < 97)//如果bufferw[i]对应字符的ASCII码数值小雨97
{
buffer[i] = Convert.ToByte(Convert.ToString(bufferw[i]));将这个数值转换Byte并保持
}
else
{
buffer[i] = Convert.ToByte((int)bufferw[i] - 87);否则减去87再转换为Byte 并保持 }
}
byte[] transformedData = new byte[20];初始化一个20长度的byte
for (int i = 0; i < 20; i++)
{
transformedData[i] = (byte)((buffer[i * 2] << 4) + buffer[i * 2 + 1]);//计算数值
}
return transformedData;//返回数组
}
catch (Exception)
{
return null;
}
}
}
}
{
if (buffern[0] != '6' && buffern[1] != '8')//buffern第一个不是6 第二个不是8
{
return null;
}
try
{
char[] bufferw = Encoding.ASCII.GetChars(buffern);//将buffern转换为char数组
byte[] buffer = new byte[40];//初始化一个40长度的数组
for (int i = 0; i < 40; i++)//循环
{
if (bufferw[i] < 97)//如果bufferw[i]对应字符的ASCII码数值小雨97
{
buffer[i] = Convert.ToByte(Convert.ToString(bufferw[i]));将这个数值转换Byte并保持
}
else
{
buffer[i] = Convert.ToByte((int)bufferw[i] - 87);否则减去87再转换为Byte 并保持 }
}
byte[] transformedData = new byte[20];初始化一个20长度的byte
for (int i = 0; i < 20; i++)
{
transformedData[i] = (byte)((buffer[i * 2] << 4) + buffer[i * 2 + 1]);//计算数值
}
return transformedData;//返回数组
}
catch (Exception)
{
return null;
}
}
}
}
展开全部
这是一段解密处理,如果参数数组以68开头,则继续,否则直接返回null。
先将byte[]的值转成ascii码,小写字母a(97)以下的将ascii码保存起来,小写字母a(97)以上的将ascii码减87在保存。此处只处理参数数组的前40位元素,之后的舍弃。
最后一处for将上面得到的40个元素压缩成20个,具体是将偶数元素右移4位加上奇数元素。
我猜想第一个for得到的byte数组是扩张的BCD码,即8位的byte其实只有低4位用来保存数据,高四位为空,所以,其实两个byte保存的是一个byte的值,而第二个for就是个压缩过程,把值还原成一个byte里保存。
先将byte[]的值转成ascii码,小写字母a(97)以下的将ascii码保存起来,小写字母a(97)以上的将ascii码减87在保存。此处只处理参数数组的前40位元素,之后的舍弃。
最后一处for将上面得到的40个元素压缩成20个,具体是将偶数元素右移4位加上奇数元素。
我猜想第一个for得到的byte数组是扩张的BCD码,即8位的byte其实只有低4位用来保存数据,高四位为空,所以,其实两个byte保存的是一个byte的值,而第二个for就是个压缩过程,把值还原成一个byte里保存。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询