tcp将时间用16进制发送

以下是乱码,
socket中用16进制发送时间,正确方式是怎样呢?

 byte[] data = new byte[4];
 long ts = (uint)(DateTime.Now.Ticks / 10000);
 System.Array.Copy(System.BitConverter.GetBytes(ts), 0, data, 0, sizeof(uint));
socketTCP.SendData(data);


 /// <summary>
       /// 把一个时间转化成四个字节的16进制字符串
       /// </summary>
       /// <param name="time">要转化的时间</param>
       /// <returns></returns>
       public static String TimeToHex(DateTime time)
       {
           StringBuilder sb = new StringBuilder();
           DateTime timeStar = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime (1970,01,01));
           TimeSpan timeSpan= time - timeStar;
           uint unitSpan= Convert.ToUInt32(timeSpan.TotalSeconds);
           if (unitSpan<0)
           {
               return sb.ToString();
           }
           byte[] bytes = System.BitConverter.GetBytes(unitSpan);
           for (int i = bytes.Length-1; i >= 0; i--)
           {
               sb.Append(bytes[i].ToString("X2"));
           }
           return sb.ToString();
       }

分成 yy yy MM dd HH mm ss 7个字节发送试试。

最简单就是一个一个的转换:

socketTCP.SendData( 
    data[0].ToString("X2") + 
    data[1].ToString("X2") + 
    data[2].ToString("X2") + 
    data[3].ToString("X2"));

找到了这样的代码。。。

/// 把十六进制数据转化成时间
       /// </summary>
       /// <param name="HexStr">16进制数据字符串</param>
       /// <returns></returns>
       public static DateTime HexToTime(string HexStr)
       {
           HexStr = HexStr.Replace(" ", "");
           DateTime time = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970,01,01));
           if (HexStr.StartsWith("oX")||HexStr.StartsWith("OX"))
           {
               HexStr = HexStr.Substring(2, HexStr.Length - 2);
           }
         
           if (HexStr.Length%2!=0)
           {
               HexStr += " ";
           }
           byte[] bytes=new byte[HexStr.Length/2];
           for (int i = 0; i < bytes.Length; i++)
           {
               bytes[bytes.Length-1-i] = Convert.ToByte(HexStr.Substring(i * 2, 2), 16);
           }
           uint unitSpan = System.BitConverter.ToUInt32(bytes, 0);
           return time.AddSeconds(unitSpan);
       }