导航

记录:8583规范位图的简单实现

Posted on 2013-07-17 11:53  da.da  阅读(1714)  评论(0)    收藏  举报
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;
        }