byte[]和string转换的有关问题

byte[]和string转换的问题
如下:


            Encoding encoding = Encoding.GetEncoding("GB2312");

            //测试数据 “我”
            byte[] by = encoding.GetBytes("我");

            //按照规定发送16字节长度的数据
            byte[] by2 = new byte[16];//都是 00 00 00...,
            //“我”编码后byte为 206,210
            by2[0] = 206;
            by2[1] = 210;
            string s = encoding.GetString(by2).Trim();//s结果为 我\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
            //我只想取出“我”,不想要后面的\0,怎么弄?


求教。。。
------解决方案--------------------
Trim('\0')一次
------解决方案--------------------
.Trim('\0');
------解决方案--------------------
Encoding encoding = Encoding.GetEncoding("GB2312");

//测试数据 “我”
byte[] by = encoding.GetBytes("我");

//按照规定发送16字节长度的数据
byte[] by2 = new byte[16];//都是 00 00 00...,
//“我”编码后byte为 206,210
by2[0] = 206;
by2[1] = 210;
var pos = 0;
for (; pos < by2.Length && by2[pos] != 0; pos++) ;
string s = encoding.GetString(by2, 0, pos).Trim();//s结果为 我


记住,要仔细权衡什么才是最合适的方法,不可弄什么“邪的歪的”技巧。
------解决方案--------------------
GetString()方法有两个重载,你用另外一个指定解码的起点和字节数就好了。
------解决方案--------------------
既然只有"我"

那你为什么要定义

byte[] by2 = new byte[16];


而且 你所谓的"按照规定"是什么规定? 你跟别人定义的通讯协议吗?

如果是的话 16个字节..你只管发就行了啊..解析是他那边的事.

不过真正的协议 不是还有长度头尾校验什么的么...