string r="12345abcde12345ABCDE";
Byte [ ] bySend= new byte [5] ;
bySend = System.Text.Encoding.Default.GetBytes (r) ;
string num="";
for(int i=0;i<bySend.Length;i++){num+=bySend[i].ToString();}
Console.Write(num+"  :"+bySend.Length);结果:495051525397989910010149505152536566676869  :20问题:在c#中的byte[]的用法是怎样的,new byte[5]的时候不是把数组的大小定为了5了吗.为何可以放得下如此长的ascII码呢?甚至我将byte[5]改成byte[1]的效果也是一样,到底byte[]的物理结构是怎么样的,我需要把它定义成byte[r.length]吗?为何????

解决方案 »

  1.   

    Byte [ ] bySend= new byte [5] ;bySend = System.Text.Encoding.Default.GetBytes (r) ;System.Text.Encoding.Default.GetBytes (r) ;将对bySend变量重新赋值;
    因此new byte [5] ;毫无意义.
    Byte [ ] bySend= System.Text.Encoding.Default.GetBytes (r) ;
    直接这样写就可以了,
    然后在截断数组的长度.
      

  2.   

    System.Text.Encoding.Default.GetBytes (r)这样的话把数组的大小也改了吗?byte[]不是静态的数组吗?从新付值会影响它的长度的吗?
      

  3.   

    写成这样你就理解了,
    Byte [ ] bySend null ;
    bySend = System.Text.Encoding.Default.GetBytes (r) ;调用System.Text.Encoding.Default.GetBytes (r)就会生成一个新的byte数组,
    bySend 只是指向该新的数组的引用。
      

  4.   

    你原来定义的byte数组的大小没有变化,System.Text.Encoding.Default.GetBytes (r)重新生成了一个新的数组,指向原来那个数组的引用被新的数组的引用覆盖掉了,你访问不到原来的那个数组了