十六进制字符串"01",转换成二进制,并且我需要取到里面每一位的值也就是里面的0或者1,来判断客户端的状态。我第一次用的方法如下:失败。 int S2 = Convert.ToInt32(_notice.Substring(44, 2), 16);//从16进制字符串中截取出"01",并转化为十进制,
                            string _s2 = Convert.ToString(S2, 2);//将十进制转换为2进制                            char[] _s_2 = _s2.ToCharArray();//赋给数组,取里面八位的值,然后用switch语句判断每一位的值,
                            string out_2 = "";
                            switch (_s_2[0])
                            {
                                case '1':
                                    out_2 = "报警";
                                    break;
                                case '0':
                                    out_2 = "正常";
                                    break;                            }
                            string S2_out_0 = out_2;//欠压,1-报警,0-正常。
                            switch (_s_2[1])
                            {
                                case '0':
                                    out_2 = "无效";
                                    break;
                                case '1':
                                    out_2 = "报警";
                                    break;                            }
                            string S2_out_1 = out_2;//掉电,1-报警,0-无效。
下面是我尝试的第二种方法,又失败了,唉,无计可施,所以发帖求教个现成的方法,急着用,谢谢!
int S1 = Convert.ToInt32(_notice.Substring(44, 2), 16);//从16进制字符串中截取出"01",并转化为十进制,
                            string _s1 = Convert.ToString(S1, 2);//将十进制转换为2进制,然后用Substring()函数截取里面的相应位的值,无论从左边取还是从右边取里面的值都失败。唉!                                                        string out_1 = "";
                            switch (_s1.Substring(7, 1))
                            {
                                case "0":
                                    out_1 = "未定位";
                                    break;
                                case "1":
                                    out_1 = "已定位";
                                    break;                            }
                            string S1_out_0 = out_1;//定位状态,1-已定位,0-未定位。
                            switch (_s1.Substring(6, 1))
                            {
                                case "0":
                                    out_1 = "正常";
                                    break;
                                case "1":
                                    out_1 = "劫警";
                                    break;                            }

解决方案 »

  1.   

    刚想了种方法,就是当它的长度不满八字的时候,比如只有1,那我给它加0;八成不对,连实验的勇气都没有了。
    int S1 = Convert.ToInt32(_notice.Substring(42, 2), 16);
                                string _s1 = Convert.ToString(S1, 2);
                                if(_s1.Length<8)
                                {
                                   for (int i = 0; i < 8-_s1.Length;i++ )
                                   {
                                       //_s1 += "0";
                                       _s1 += "0" + _s1;
                                   }
                                }
      

  2.   

    int S1 = Convert.ToInt32(_notice.Substring(42, 2), 16);
                                string _s1 = Convert.ToString(S1, 2);
                                string _zero = "";
                                if(_s1.Length<8)
                                {
                                   for (int i = 0; i < 8-_s1.Length;i++ )
                                   {
                                       //_s1 += "0";
                                       _zero += "0";
                                       //_s1 += "0" + _s1;
                                   }
                                   _s1 = _zero + _s1;
                                }
      

  3.   

    楼主可能把问题想复杂了,下面是一种办法:
                  //十六进制字符串转int
                  int i = int.Parse("10", System.Globalization.NumberStyles.HexNumber);
                //转二进制字符串(可能不满8位)
                string str = Convert.ToString(i, 2);
                //转8位长度字符串
                int i2 = int.Parse(str);
                string result = i2.ToString("00000000");
    另外楼主可以看看“位运算”,也是一种比较好的方法。
      

  4.   


    int S2 = Convert.ToInt32(_notice.Substring(44, 2), 16);
    int b = 1<<n;// 这个N就是你要检测的第多少位
    if( S2&b == 0)
    {
          //这里写检测位为0的代码
    }
    else
    {
          //这里写检测为为1的代码
    }
      

  5.   

    很明显 lz是弄gps车台定位的