问题:
  private Socket aaa;
  byte[] bbb = new byte[100];
  aaa.Receive(bbb, bbb.Length, 0);
  string ccc = System.Text.Encoding.BigEndianUnicode.GetString(bbb);//把收到的字节数组转换为字符串
  TextBox1. Text(ccc);收到数据,翻成字符串后,TextBox1能正确显示字符串,但是在断点调试时候,CCC的值始终有很多\0\0\
我把bbb开小点,\0\0\0会有所减少,但是我必须要把数组元数开够呀.虽然不影响输出结果,但是我程序中有对收到字符串的判断,判断CCC的值.   
 现在假如判断CCC=="A"
  我就得在程序里写if (ccc==a\0\0\0\0\0.....)
 这样弄得好郁闷哟,为什么多了这么多\0出来,文本框输出的字符串却正常. Encoding.UTF8;Encoding.ASCII;Encoding.Unicode;我都试过了,还是一个样子.这些字节与字符串的相互转换函数,我都单独测试过都没问题,但是一拿进SOCKET收发的时候,收的数据就会加很多\0             

解决方案 »

  1.   

    你们Socket 收到的字符串断点调试会多出来些\0\0吗?
      

  2.   

    Receive的返回值是实际接收到的字节数。
      

  3.   

    根据这个返回值,使用GetString的另一个重载形式可以控制应该转换缓冲区中哪一部分数据。
      

  4.   

    你的意思是RECEIVE还有个返回值,怎么在GetString用这个返回值?谢谢!
      

  5.   

    是不是?
     int i;
     i=aaa.Receive(bbb, bbb.Length, 0); 
    string ccc = System.Text.Encoding.BigEndianUnicode.GetString(bbb,0,i);
      

  6.   

    对。
    不过你的Receive方法,后面两个参数写反了吧?