none
TcpClient发送十六进制的字符串 RRS feed

  • 问题

  • 使用TCPClient建立连接后,使用netWorkStream.write发送一串数据,发送的数据为46494E53,作为16进制发送,该如何实现呢?使用Byte[] sendBytes = Encoding.UTF8.get(“46494E53”)后总是不对,谢谢!
    guiwenyang
    2010年2月20日 10:09

答案

  • using System;
    using System.Data;
    using System.Reflection;
    using System.Text;
    
    namespace X.ConsoleApplication
    {
        class Program
        {
            static void Main(string[] args)
            {
                int value = 0x46494E53;
                byte[] b = ToByteArray(value);
                int value2 = ToInt32(b);
            }
    
            public static int ToInt32(byte[] byteArray)
            {
                int k = 0;
    
                for (int i = 0; i < 4; i++)
                    k += (byteArray[i] & 0xFF) << (8 * i);
    
                return k;
            }
    
            public static byte[] ToByteArray(Int32 value)
            {
                byte[] byteArray = new byte[4];
    
                for (int i = 0; i < 4; i++)
                    byteArray[i] = (byte)(value >> (i * 8 & 0xFF));
    
                return byteArray;
            }
        }
    }

    知识改变命运,奋斗成就人生!
    • 已标记为答案 guiwenyang 2010年2月21日 8:22
    2010年2月21日 1:20
    版主

全部回复

  • int value  = 0x46494E53;
    Byte[] sendbytes = System.Convert.ToByte(value);
    2010年2月20日 12:48
  • 你好!
         你这样编写的话就可以:
    Byte[] sendBytes=Encoding.UTF8.GetBytes(“46494E53”);
    这里发送的就是“46494E53”这个字符串的二进制数据!

    你接收的时候也做类似的解析就可以了!
    string s=Encoding.UTF8.GetString(...);
    int result=Convert.ToInt32(s,16);     //这里按16进制来解析字符串!
    周雪峰
    2010年2月20日 14:23
    版主
  • using System;
    using System.Data;
    using System.Reflection;
    using System.Text;
    
    namespace X.ConsoleApplication
    {
        class Program
        {
            static void Main(string[] args)
            {
                int value = 0x46494E53;
                byte[] b = ToByteArray(value);
                int value2 = ToInt32(b);
            }
    
            public static int ToInt32(byte[] byteArray)
            {
                int k = 0;
    
                for (int i = 0; i < 4; i++)
                    k += (byteArray[i] & 0xFF) << (8 * i);
    
                return k;
            }
    
            public static byte[] ToByteArray(Int32 value)
            {
                byte[] byteArray = new byte[4];
    
                for (int i = 0; i < 4; i++)
                    byteArray[i] = (byte)(value >> (i * 8 & 0xFF));
    
                return byteArray;
            }
        }
    }

    知识改变命运,奋斗成就人生!
    • 已标记为答案 guiwenyang 2010年2月21日 8:22
    2010年2月21日 1:20
    版主
  • 传输 int 类型时需要进行高低位互换,使用上面的方式即可。
    知识改变命运,奋斗成就人生!
    2010年2月21日 5:05
    版主
  • 非常感谢!
    guiwenyang
    2010年2月21日 8:22