首页 新闻 搜索 专区 学院

关于c# 一个换行的问题,求解答

0
[已解决问题] 解决于 2018-05-25 11:55

今天在做一个小实验的时候,发现了一个换行的疑问。

void ShowMsg(string str)
        {
            txtLog.AppendText(str + "\r\n");
        }
 Socket socketSend = o as Socket;
            while (true)
            {
                try
                {
                    byte[] buffer = new byte[1024 * 1024 ];
                    int r = socketSend.Receive(buffer);
                    if (r == 0)
                    {
                        break;
                    }
                    string str = Encoding.UTF8.GetString(buffer, 0, buffer.Length);
                    ShowMsg(socketSend.RemoteEndPoint + ":" + str);


                    //byte[] buffer = new byte[1024 * 1024];
                    //int r = socketSend.Receive(buffer);
                    //if (r == 0)
                    //{
                    //    break;
                    //}
                    //string str = Encoding.UTF8.GetString(buffer, 0, r);
                    //ShowMsg(socketSend.RemoteEndPoint.ToString() + ":" + str);
                }
                catch
                { }
            }

问题出在将字节转换成字符串的时候,用buffer.Length设置的长度,字符串不换行,而用读取到的实际长度r获取字符串是可以换行的,对这里有点疑惑,希望有人能解答一下,谢谢

 


Heart丶的主页 Heart丶 | 菜鸟二级 | 园豆:204
提问于:2018-05-22 21:33
< >
分享
最佳答案
0

不换行的时候,你输出buffer里的每个字符看看都是些什么

奖励园豆:5
新的开始 | 小虾三级 |园豆:679 | 2018-05-22 21:48

恩,我早上调试了下,发现用buffer长度的字符串用\0结束符补全字符串,字符串在\0处被认为结束了,\r\n就没有作用。但是这个字符我在winform试验确实是正确的,但是在控制台中,这个\0字符后面的内容又可以显示出来,这是什么情况?

Heart丶 | 园豆:204 (菜鸟二级) | 2018-05-23 10:33
其他回答(1)
0

 在buffer里换行符也是一个字符对应的ascii吗,只是转成string字符串的时候编辑解析的时候解析成换行了

jqw2009 | 园豆:2301 (老鸟四级) | 2018-05-25 08:55

恩,你说的意思我能够理解。不过我的换行符是在转换成字符串后加的换行符,在showmsg方法里面。换行的原因我试过了,是因为用buffer长度的时候用\0补全了剩余的长度,用 r 长度的时候,字符长度刚好是写入的长度,所以不需要用\0补全。而在winfrom中,\0会被当做字符串结尾符,后面的不会显示了。但是我拿到控制台当中,\0只是被转换成一个空格字符,后面的内容还是可以打印出来

支持(0) 反对(0) Heart丶 | 园豆:204 (菜鸟二级) | 2018-05-25 11:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册