using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SLH.SSDMS.Common { /// /// 数据类型转换 /// public static class StringChange { #region 数据类型转换函数 public static byte[] Swap16Bytes(byte[] OldU16) { byte[] ReturnBytes = new byte[2]; ReturnBytes[1] = OldU16[0]; ReturnBytes[0] = OldU16[1]; return ReturnBytes; } public static bool CompareBytes(byte[] byteA, byte[] byteB, int iLen) { for (int i = 0; i < iLen; i++) { if (byteA[i] != byteB[i]) { return false; } } return true; } public static string bytesToHexStr(byte[] bytes, int iLen)//e.g. { 0x01, 0x01} ---> " 01 01" { string returnStr = ""; if (bytes != null) { for (int i = 0; i < iLen; i++) { returnStr += bytes[i].ToString("X2"); } } return returnStr; } public static byte[] HexStrTorbytes(string strHex)//e.g. " 01 01" ---> { 0x01, 0x01} { strHex = strHex.Replace(" ", ""); if ((strHex.Length % 2) != 0) strHex += " "; byte[] returnBytes = new byte[strHex.Length / 2]; for (int i = 0; i < returnBytes.Length; i++) returnBytes[i] = Convert.ToByte(strHex.Substring(i * 2, 2), 16); return returnBytes; } public static string StringToHexString(string s, Encoding encode) { byte[] b = encode.GetBytes(s); //按照指定编码将string编程字节数组 string result = string.Empty; for (int i = 0; i < b.Length; i++) //逐字节变为16进制字符,以%隔开 { result += "%" + Convert.ToString(b[i], 16); } return result; } public static string HexStringToString(string hs, Encoding encode) { //以%分割字符串,并去掉空字符 string[] chars = hs.Split(new char[] { '%' }, StringSplitOptions.RemoveEmptyEntries); byte[] b = new byte[chars.Length]; //逐个字符变为16进制字节数据 for (int i = 0; i < chars.Length; i++) { b[i] = Convert.ToByte(chars[i], 16); } //按照指定编码将字节数组变为字符串 return encode.GetString(b); } public static short SwapInt16(this short n) { return (short)(((n & 0xff) << 8) | ((n >> 8) & 0xff)); } public static ushort SwapUInt16(this ushort n) { return (ushort)(((n & 0xff) << 8) | ((n >> 8) & 0xff)); } public static int SwapInt32(this int n) { return (int)(((SwapInt16((short)n) & 0xffff) << 0x10) | (SwapInt16((short)(n >> 0x10)) & 0xffff)); } public static uint SwapUInt32(this uint n) { return (uint)(((SwapUInt16((ushort)n) & 0xffff) << 0x10) | (SwapUInt16((ushort)(n >> 0x10)) & 0xffff)); } public static long SwapInt64(this long n) { return (long)(((SwapInt32((int)n) & 0xffffffffL) << 0x20) | (SwapInt32((int)(n >> 0x20)) & 0xffffffffL)); } public static ulong SwapUInt64(this ulong n) { return (ulong)(((SwapUInt32((uint)n) & 0xffffffffL) << 0x20) | (SwapUInt32((uint)(n >> 0x20)) & 0xffffffffL)); } #endregion } }