using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //byte[] bt = { 0x68, 0x12, 0xFE};
            byte b1 = 0x68;
            byte b2 = 0x12;
            byte b3 = 0xFE;
            byte[] bt = { b1, b2, b3 };
            BitArray br = new BitArray(bt);
            string strNum = "";
            //for (int i = 16; i >= 0; i--)
            for (int i = 0; i <= 23; i++)        
            {
                if (br[i] == false)
                    strNum += "0";
                else
                    strNum += "1";
            }
           Console.WriteLine(strNum);
           int a = Convert.ToInt32(strNum, 2);
           Console.WriteLine(a);
           string mm = Convert.ToString(a);
           Console.WriteLine(mm);
            Console.Read();
        }
    }
}请大家阅读一下以上的程序,,
Console.WriteLine(strNum);  的输出为000101100100100001111111,,
想请问一下大家,,上面程序的读数为什么倒过来的,,
如果我想读出的是0x68即01101000,,0x00010100这样读下去....即对按原来的顺序读出
再对strNum变成十进制.
请解释下int a = Convert.ToInt32(strNum, 2);这句语句的意思.
THS

解决方案 »

  1.   

    Convert.ToInt32(strNum, 2);这句语句的意思是把strNum字符串按二进制的规则转换成整数.
    比如strNum为"110",如果按二进制转换成整数就是6,而按十进制转的话就是一白一十.
    你的其它问题看不明白.
      

  2.   

    上面程序读取bt的时候返过来了,,得不到预期的结果.
    我想读取的是要按0x68,0x12,0xFE,即011010000001001011111110的然后再转化为十进制
    谢谢各位帮忙想一想
      

  3.   

    MSDN中是这样说的:
    该数组中的第一个字节表示 0 到 7 位,第二个字节表示 8 到 15 位,依此类推。每个字节的“最低有效位”表示最小索引值:"bytes[0] & 1" 表示位 0,"bytes[0] & 2" 表示位 1,"bytes [0] & 4" 表示位 2,等等。有了这个规则就可以输出日常习惯的结果了.
      

  4.   

    杰主,你的程序我改正后的如下,请测试:using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;namespace ConsoleApplication1
    {
    class Program
    {
    static void Main(string[] args)
    {
    //byte[] bt = { 0x68, 0x12, 0xFE};
    byte b1 = 0x68;
    byte b2 = 0x12;
    byte b3 = 0xFE;
    byte[] bt = { b1, b2, b3 };
    BitArray br = new BitArray(bt);
    string strNum = "";
    //for (int i = 16; i >= 0; i--)
    for (int i = 0; i < br.Length/8; i++)
    {
    for (int index = 8*i + 7; index >= 8*i; index--)
    {
    if (br[index] == false)
    strNum += "0";
    else
    strNum += "1";
    }
    }
    Console.WriteLine(strNum);
    int a = Convert.ToInt32(strNum, 2);
    Console.WriteLine(a);
    string mm = Convert.ToString(a);
    Console.WriteLine(mm);
    Console.Read();
    }
    }
    }
      

  5.   

    上面的"平民百姓",,还是不平民嘎,
    谢谢您结果是试出来,,,
    我知道你是程序是一个字节一字节处理,,
    但是我这个程序的目的是取bt里面任意连续的几位,例如5至10位,,7至16位,,12至20位,,,
    请是是不是现在是不是要对字符串strNum进行加工了,,
    请问有没有办法??
    THS
      

  6.   

    我给楼主又改了一下程序,这个程序里对Bit的顺序进行了调整.在新的BitArray里顺序是正确的.并保留了原来的写法.可以参考一下:using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;namespace ConsoleApplication1
    {
    class Program
    {
    static void Main(string[] args)
    {
    byte b1 = 0x68;
    byte b2 = 0x12;
    byte b3 = 0xFE;
    byte[] bt = { b1, b2, b3 };
    BitArray br = new BitArray(bt);
    BitArray _br = new BitArray(br.Length);//这个是正常的顺序
    int _index = 0; 
    string strNum = "";
    for (int i = 0; i < br.Length/8; i++)
    {
    for (int index = 8*i + 7; index >= 8*i; index--)
    {
    if (br[index] == false)
    strNum += "0";
    else
    strNum += "1"; _br[_index] = br[index];//进行改正
    _index++;//索引加加
    }
    }
    string _strNum = null;
    for (int i = 0; i < _br.Length; i++)
    {
    if (_br[i])
    {
    _strNum += "1";
    }
    else
    {
    _strNum += "0";
    }
    }
    //输出两个字符串进行比较
    Console.WriteLine(strNum);
    Console.WriteLine(_strNum); int a = Convert.ToInt32(strNum, 2);
    Console.WriteLine(a);
    string mm = Convert.ToString(a);
    Console.WriteLine(mm);
    Console.Read();
    }
    }
    }