using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Ant.Common { public class SocketCommTool { public static int ConvertDateTimeInt(System.DateTime time) { System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); return (int)(time - startTime).TotalSeconds; } /// /// // 把字节型转换成十六进制字符串 /// /// /// public static string ByteToString(byte[] InBytes) { string StringOut = ""; foreach (byte InByte in InBytes) { StringOut = StringOut + String.Format("{0:X2} ", InByte); } return StringOut; } public string ByteToString(byte[] InBytes, int len) { string StringOut = ""; for (int i = 0; i < len; i++) { string str16 = String.Format("{0:X2} ", InBytes[i]); StringOut = StringOut + str16; } return StringOut; } // 把十六进制字符串转换成字节型 public static byte[] StringToByte(string InString) { string[] ByteStrings; ByteStrings = InString.Split(" ".ToCharArray()); byte[] ByteOut; ByteOut = new byte[ByteStrings.Length - 1]; for (int i = 0; i == ByteStrings.Length - 1; i++) { ByteOut[i] = Convert.ToByte(("0x" + ByteStrings[i])); } return ByteOut; } public string ByteToASCII(byte[] InBytes) { string StringOut = ""; foreach (byte InByte in InBytes) { string str = BitConverter.ToString(InBytes, 0, 2); //int iValue = Convert.ToInt32("0C", 16); // 16进制->10进制 //int value = Convert.ToInt32(InByte.ToString(),16); byte[] bs = System.BitConverter.GetBytes(InByte); //int->byte[] string sValue = System.Text.Encoding.ASCII.GetString(bs).Substring(0, 1); string hexOutput = String.Format("{0:X}", InByte); StringOut = StringOut + sValue; } return StringOut; } /// /// 字节数组转16进制字符串 /// /// /// public static string byteToHexStr(byte[] bytes) { string returnStr = ""; if (bytes != null) { for (int i = 0; i < bytes.Length; i++) { returnStr += bytes[i].ToString("X2"); } } return returnStr; } public string StrToHex(string mStr) //返回处理后的十六进制字符串 { return BitConverter.ToString( ASCIIEncoding.Default.GetBytes(mStr)).Replace("-", " "); } /* StrToHex */ public string HexToStr(string mHex) // 返回十六进制代表的字符串 { mHex = mHex.Replace(" ", ""); if (mHex.Length <= 0) return ""; byte[] vBytes = new byte[mHex.Length / 2]; for (int i = 0; i < mHex.Length; i += 2) if (!byte.TryParse(mHex.Substring(i, 2), NumberStyles.HexNumber, null, out vBytes[i / 2])) vBytes[i / 2] = 0; return ASCIIEncoding.Default.GetString(vBytes); } /* HexToStr */ /// /// 十六进制转成数组 /// /// /// public static byte[] HexTobyte(string mHex) // 返回十六进制代表的字符串 { mHex = mHex.Replace(" ", ""); byte[] vBytes = new byte[mHex.Length / 2]; for (int i = 0; i < mHex.Length; i += 2) if (!byte.TryParse(mHex.Substring(i, 2), NumberStyles.HexNumber, null, out vBytes[i / 2])) vBytes[i / 2] = 0; return vBytes; } /// /// 16进制字符串转字节数组 /// /// /// private static byte[] strToToHexByte(string hexString) { hexString = hexString.Replace(" ", ""); if ((hexString.Length % 2) != 0) hexString += " "; byte[] returnBytes = new byte[hexString.Length / 2]; for (int i = 0; i < returnBytes.Length; i++) returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2).Trim(), 16); return returnBytes; } /// /// 从汉字转换到16进制 // /// /// 编码,如"utf-8","gb2312" /// 是否每字符用逗号分隔 /// public static string ToHex(string s, string charset, bool fenge) { if ((s.Length % 2) != 0) { s += " ";//空格 //throw new ArgumentException("s is not valid chinese string!"); } System.Text.Encoding chs = System.Text.Encoding.GetEncoding(charset); byte[] bytes = chs.GetBytes(s); string str = ""; for (int i = 0; i < bytes.Length; i++) { str += string.Format("{0:X}", bytes[i]); if (fenge && (i != bytes.Length - 1)) { str += string.Format("{0}", ","); } } return str.ToLower(); } /// /// 给车发送开锁还是锁车 /// /// 包名 /// 状态 /// public static string sendHalderHex(string parkname, int state) { var str = ""; string headstr = "FAAF"; string footstr = "FEEF"; char[] values = parkname.ToCharArray(); foreach (char letter in values) { int value = Convert.ToInt32(letter); str += String.Format("{0:X2}", value); } str += "000200"; str += String.Format("{0:X2}", state); str = headstr + str + "00" + footstr; return str; } /// /// /// /// /// public static string sendCarInfo(int time) { var str = ""; string headstr = "FAAF"; string footstr = "FEEF"; string parkname = "SB02"; char[] values = parkname.ToCharArray(); foreach (char letter in values) { int value = Convert.ToInt32(letter); str += String.Format("{0:X2}", value); } str += "000400"; string s = Convert.ToString(time, 16).ToUpper(); string s1 = s.Substring(0, 2); string s2 = s.Substring(2, 2); string s3 = s.Substring(4, 2); string s4 = s.Substring(6, 2); string ss = s4 + s3 + s2 + s1; //string s = time.ToString(); str += ss; str = headstr + str + footstr; return str; } /// /// 从16进制转换成汉字 /// /// /// 编码,如"utf-8","gb2312" /// public static string UnHex(string hex, string charset) { if (hex == null) throw new ArgumentNullException("hex"); hex = hex.Replace(",", ""); hex = hex.Replace("/n", ""); hex = hex.Replace("//", ""); hex = hex.Replace(" ", ""); if (hex.Length % 2 != 0) { hex += "20";//空格 } // 需要将 hex 转换成 byte 数组。 byte[] bytes = new byte[hex.Length / 2]; for (int i = 0; i < bytes.Length; i++) { try { // 每两个字符是一个 byte。 bytes[i] = byte.Parse(hex.Substring(i * 2, 2), System.Globalization.NumberStyles.HexNumber); } catch { // Rethrow an exception with custom message. throw new ArgumentException("hex is not a valid hex number!", "hex"); } } System.Text.Encoding chs = System.Text.Encoding.GetEncoding(charset); return chs.GetString(bytes); } } }