比如 byte[] buff = new byte[100];
buff = Encodeing.Default.GetBytes("abc");
所以实际有效长度是 3,那么怎么得到这个有效长度.
不能把 abc 赋值给一个变量判断那变量的.
本来我想这样
for (int i = 0; i < buff.Length; i++)
            {
                if (i <= 25) continue;
                if (buff[i] == 0x00)
                {
                    length = i;
                    break;
                }
            }
一般情况下,这样可以,但是
因为中间 buff 又其他值,比如一个 整型值 转换为 4位的字节
高位有时候就有 0x00,
所以这样就不能判断了.也不能用循环 i=buff.Length;i>0;i--判断最后一个有效值,这样效率不行.大家帮我想想办法.谢谢了

解决方案 »

  1.   

    int i = buff.GetLength(0);
      

  2.   

    byte[] bytes = new byte[200];
            private void button1_Click(object sender, EventArgs e)
            {
                bytes = System.Text.Encoding.Default.GetBytes(textBox1.Text.Trim());
                MessageBox.Show(bytes.Length.ToString());
            }
      

  3.   

    buff = Encodeing.Default.GetBytes("abc");
    不需要之前调用初始化,这个方法返回是新的实例,也就是有效的数据。
      

  4.   

    using System;
    using System.Text;
    class Program
    {
        static void Main(string[] args)
        {
            byte[] buff = new byte[100];
            buff = Encoding.Default.GetBytes("abc");//Encoding不是Encodeing
            Console.WriteLine(buff.GetLength(0));
        }
    }
      

  5.   

    GetLength(0) 取出来的还是 100长度啊
      

  6.   

    byte[] shit = new byte[100];
                byte[] a = System.Text.Encoding.Default.GetBytes("abc");
                byte[] b = int2bytes(2);
                
                b.CopyTo(shit, 0);
                a.CopyTo(shit, 4);            MessageBox.Show(shit.GetLength(0).ToString());
                  public static byte[] int2bytes(int num)
            {
                byte[] b = new byte[4];
                int mask = 0xff;
                for (int i = 0; i < 4; i++)
                {
                    b[i] = (byte)(num >> (24 - i * 8));
                }
                return b;
            }
      

  7.   

    改为MessageBox.Show(a.GetLength(0).ToString());
      

  8.   

    byte[] shit = new byte[100];你什么都没塞进去,你想长度几?你把abc塞进去,长度就是3
      

  9.   

    byte[] buff = new byte[100];
    buff = Encodeing.Default.GetBytes("abc");
    MessageBox.Show(buff.GetLength(0).ToString());脑子锈逗了受不了了
      

  10.   

    不管buff初始定义大小为多少,当调用buff = Encodeing.Default.GetBytes("abc");那么buff都被赋值为GetBytes方法返回的数组(不是copy),相当于重定义了buff,所以不用与判断buff的有效字节.
      

  11.   

    Avoid(千金散尽还复来) 没明白意思就不要乱说
    简单的这样 buff=.. 是取出了实际长度.
    因为中间 buff 又其他值,比如一个 整型值 转换为 4位的字节
    这样不可能用 buff= 那不覆盖了嘛
    .只能CopeTo 或者 buff[i]=之类的
    简单的赋值的话,我还找你来取长度.you病
      

  12.   


    buff = Encodeing.Default.GetBytes("abc");
    不需要之前调用初始化,这个方法返回是新的实例,也就是有效的数据。这个说的对阿
      

  13.   

    Encodeing.Default.GetBytes("abc");是没问题,返回的是新实例.
      

  14.   

    用ByteBuffer rs~~~~
    int l=(int )rs.get(2);
    搞定~~
      

  15.   

    对,是没错
    关键是,我不能这么直接赋值。
    也就是说不能用 buff = Encodeing.Default.GetBytes("abc");
    因为我还需要设置其他的 byte[] 的值放到 buff里。
    比如 byte[] a = .. ; byte[] b=..; byte[] c = ..;
    然后把 a , b ,c 都放到 buff里去。
      

  16.   

    @caizhenfang(几路)
    你可以返回后再通过Array.Copy或实例方法CopyTo复制到你定义的Buf中。
    比如byte[] buff = new byte[100];
    Encoding.Default.GetBytes("abc").CopyTo(buff, 0);
    但是上面的语句不到返回的长度。
    最好是有一个临时数组:
    byte[] buf = Encoding.Default.GetBytes("abc");
    buf.CopyTo(buff, 0);
    后面的再追加时可以根据buf的长度设置相应的位置。