8583规范使用位图来标识报文包含的域,就是用8个或16个字节中每一位代表一个域,相应从1到64或从1到128域,这里是用c#把一个包含域的数组转换成位图的简单实现:
/// <summary>
/// 生成bit-map
/// </summary>
/// <param name="len">8或16</param>
/// <param name="indexs">域数组{2,4,6,8,9}</param>
/// <returns></returns>
public static byte[] getBitMap(int len, int[] indexs)
{
byte[] temp = new byte[len];
int t1, t2;
byte t3;
for (int i = 0; i < len; i++)
{
temp[i] = 0x00;
}
for (int k = 0; k < indexs.Length; k++)
{
if (indexs[k] > 8 * len || indexs[k] <= 0)
{
continue;
}
t1 = indexs[k] / 8;
t2 = indexs[k] % 8;
if (t2 == 0)
{
t3 = 0x01;
temp[t1 - 1] |= t3;
}
else
{
t3 = 0x80;
t3 = (byte)(t3 >> (t2 - 1));
temp[t1] |= t3;
}
}
return temp;
}
浙公网安备 33010602011771号