我用C#在服务器上放了个TCP服务器程序,监听8888端口
现在客户端用16进制编码后发送数据到服务器
服务器怎么接收呢
我开始用System.Text.Encoding.ASCII.GetString(buffer, 0, bufferlen);
来接收,但显示乱码
可是Encoding并没有16进制的相关方法
该怎么接收才不乱码呢
希望得到各位大大的帮忙
我在线等

解决方案 »

  1.   

    如果你要显示16进数值 使用 BitConvert.ToString(buffer);
      

  2.   

    我现在是在服务器接收客户端数据的时候收到的是16进制的数据
    我想把这个16进制的数据读出来,我读出其中我需要的数据保存到数据库
    我把收到的byte数组,抓图发给你,行吗?
      

  3.   

    string str;
    str=encoding.bigenglish.getstring(buffer);
    可能你输入了汉字
      

  4.   

    字符和十六进制码的互换
    private string ToUnicodeString(string s)
    {
        StringBuilder sb = new StringBuilder();
        byte[] bytes = Encoding.Unicode.GetBytes(s);
        for (int i = 0; i < bytes.Length; )
        {
            sb.Append("\\u");
            sb.Append(bytes[i + 1].ToString("x2"));
            sb.Append(bytes[i].ToString("x2"));        i += 2;
        }    return sb.ToString();
    }private string ToNormalString(string input)
    {
        string pattern = "\\\\u([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})";
        Match match = System.Text.RegularExpressions.Regex.Match(input,pattern);
        System.Collections.ArrayList numlist = new System.Collections.ArrayList();    while(match.Success)
        {
            string s = match.Groups[2].Value;
            byte num = byte.Parse(s, System.Globalization.NumberStyles.AllowHexSpecifier);
            numlist.Add(num);
            s = match.Groups[1].Value;
            num = byte.Parse(s, System.Globalization.NumberStyles.AllowHexSpecifier);
            numlist.Add(num);
            match = match.NextMatch();
        }    byte[] bytes = new byte[numlist.Count];
        numlist.CopyTo(bytes);
        string result = Encoding.Unicode.GetString(bytes);
        return result;
    }
    调用结果:
    ToUnicodeString("Hello World");    -->    \u0048\u0065\u006c\u006c\u006f\u002c\u0020\u0057\u006f\u0072\u006c\u0064\u0021string str = @"\u0048\u0065\u006c\u006c\u006f\u002c\u0020\u0057\u006f\u0072\u006c\u0064\u0021";
    ToNormalString(str);        -->       Hello World!
      

  5.   

    需要先知道对方的编码方式,然后才能使用Encoding的GetString方式解码:string s=Encoding.Default.GetString(buffer);
    这是使用系统的默认编码方式。
      

  6.   

    感谢各位的热情回答,这样吧,我再把问题细说一下!
    我现在调试的程序是车载GPS将数据传到指定的服务器上
    服务器上放了一个TCP服务器监听程序
    我现在要做的就是将收到的数据,提取出我需要的信息,比如经纬度,但现在我用下面方式接收数据
    Byte[] buffer = new Byte[1024];
    try
       {
           bufLen = client.Available;
           client.Receive(buffer, 0, bufLen, SocketFlags.None);
            if (bufLen == 0)
               continue;
       }当我用Encoding.Default.GetString(buffer);想把他变成字符后,再分解字符串的时候就发现Encoding.Default.GetString(buffer)返回的是一个乱码的东西GPS的数据编码 GPS通讯协议里是这样编码的:
    说明:“$”(0x24):记录头,用于中心识别记录起始位置;
    时间:0x050316,标准时间5点3分16秒,相当于北京时间13点3分16秒;
    日期:0x220902,2002年9月22日;
    纬度值:0x22128745,22度12.8745
    经度值:0x113466574C,113度46.6574,最后字节(序号0x15)含义:
    bit7654,经度最后一位
    bit3,1:东经,0:西经
    bit2,1:北纬,0:南纬
    bit1,1:A,0:V
    bit0,未定义
    速度、方向:0x014028:速度014节,方向028大概情况就是这样!我循环输出过 buffer里的字节,发现他们都是ASCII值,0-255之间,但用ascii解析出来就是乱码,搞不懂
      

  7.   

    ???????????????????我只想知道 bitconvert.tostring()里面的参数说明
      

  8.   

    我是侦听一个端口的视频流,mpeg4编码的同求