首页 新闻 会员 周边

从流里读数据到字节数组不够的为啥全为\0了

0
悬赏园豆:15 [已解决问题] 解决于 2013-03-27 23:33

using (Stream inputStream = request.InputStream)

                    {
                        byte[] bytes = new byte[4096];
                        int iread = 0;
                        //循环从数据流中获取请求所提交的数据,存入字节数组
                        while (true)
                        {
                            iread = inputStream.Read(bytes, 0, 1024);
 
                            if (iread == 0)
                                break;
                        }
 
                        //将获取的字节数组转换成固定字符集的字符串
                        string requestParam = encoding.GetString(bytes);
 
requestParam内容最后为:测容\0\0\0\0\0\0\0\0.....
 
我抛到界面上显示,就是因为多了后面那些0 使用\r\n都不能换行了
 
this.txtServerReceiveMsg.AppendText("接受到客户端请求:" +requestParam +"\r\n");
 
 
 

 

 
吴顶天的主页 吴顶天 | 初学一级 | 园豆:39
提问于:2013-03-15 17:15
< >
分享
最佳答案
0

.net  framework 4.0    的stream 好像可以截断,     就是说  iread 是你读到的 数,      8 ,9 啊什么的。 楼上的函数应该是正确的。  3.5 stream 好像是不行, iread 就一直是1024.这时候需要咱自己手动截断

收获园豆:15
kotl | 初学一级 |园豆:5 | 2013-03-15 21:28
其他回答(3)
1

后面的\0不是0,是字符串结束标识符,这是一种语法规定。另外,string requestParam = encoding.GetString(bytes);不能直接这样转的。'\0'的ASCII是0,按你这样处理的话,结果肯定会输出一堆0咯。你应该这样写:string requestParam = Encoding.ASCII.GetString(bytes, 0, iread);

allon6318 | 园豆:858 (小虾三级) | 2013-03-15 17:21
0

我看不出这里有任何问题。字符串后边的结束符\0不影响输出,就是说你可以忽略这些\0。别烦恼了:)

Luke Zhang | 园豆:293 (菜鸟二级) | 2013-03-17 21:29
0

需要初始化下bytes数组

LastPc | 园豆:225 (菜鸟二级) | 2013-03-19 09:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册