using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Mesnac.DeviceAdapter.Fuchs { public static class StringChange { //public StringChange() //{ //} public static IEnumerable> Split(this IEnumerable list, int parts) { int i = 0; var splits = from item in list group item by i++ % parts into part select part.AsEnumerable(); return splits; } 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; } /// /// 将byte数组转换成十六进制字符串 //e.g. { 0x01, 0x01} ---> " 01 01" /// /// byte数组 /// 数组长度 /// 十六进制字符串 public static string bytesToHexStr(byte[] bytes, int iLen) { 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)); } } }