/// <summary> /// 将字符 转换成 十六进制 /// </summary> /// <param name="inChar"></param> /// <param name="needPrefix">是否加\x前缀</param> /// <returns></returns> public static string ConvertCharToHex(this char inChar, PrefixForCharToHex prefixForCharToHex = PrefixForCharToHex.None) { string hex = Convert.ToByte(inChar).ToString("x2"); switch (prefixForCharToHex) { case PrefixForCharToHex.LuceneEscape: hex = @"symbolx" + hex; break; case PrefixForCharToHex.LuceneNormal: hex = @"symbolx" + hex; break; case PrefixForCharToHex.Escape: hex = @"\x" + hex; break; case PrefixForCharToHex.Normal: hex = @"0x" + hex; break; default: break; } return(hex); }
/// <summary> /// 将前缀的枚举类型转换成对应的正则表达式部分 /// </summary> /// <param name="prefixForCharToHex"></param> /// <returns></returns> private static string PrefixForCharToHexForRegexPttnpartial(this PrefixForCharToHex prefixForCharToHex) { string retString = ""; switch (prefixForCharToHex) { case PrefixForCharToHex.LuceneEscape: retString = @"symbolx"; break; case PrefixForCharToHex.LuceneNormal: retString = @"symbolx"; break; case PrefixForCharToHex.Escape: retString = @"\\x"; break; case PrefixForCharToHex.Normal: retString = @"0x"; break; default: break; } return(retString); }
/// <summary> /// 字符是否符合符号的格式 /// </summary> /// <param name="inString"></param> /// <returns></returns> public static bool IsSymbolMark(this string inString, PrefixForCharToHex prefixForCharToHex = PrefixForCharToHex.LuceneEscape) { string retString = inString ?? ""; string prefix = prefixForCharToHex.PrefixForCharToHexForRegexPttnpartial(); string pttnSymbolMark = @"(?i)" + prefix + @"([\da-f]{2,})"; return(System.Text.RegularExpressions.Regex.IsMatch(retString, pttnSymbolMark)); }
/// <summary> /// 将十六进制的字符串转化成字符 /// </summary> /// <param name="hexNumber"></param> /// <param name="prefixForCharToHex"></param> /// <returns></returns> public static char ConvertHexToChar(this string hexNumber, PrefixForCharToHex prefixForCharToHex = PrefixForCharToHex.LuceneEscape) { var hexString = string.Empty; var isSymbolMark = hexNumber.IsSymbolMark(out hexString, prefixForCharToHex); if (isSymbolMark) { long result = 0; long.TryParse(hexString, System.Globalization.NumberStyles.HexNumber, null, out result); return((char)result); } return((char)0); }
/// <summary> /// 字符是否符合符号的格式 /// </summary> /// <param name="inString"></param> /// <param name="hexNumber"></param> /// <returns></returns> public static bool IsSymbolMark(this string inString, out string hexNumber, PrefixForCharToHex prefixForCharToHex = PrefixForCharToHex.LuceneEscape) { hexNumber = string.Empty; string retString = inString ?? ""; string prefix = prefixForCharToHex.PrefixForCharToHexForRegexPttnpartial(); string pttnSymbolMark = @"(?i)" + prefix + @"(?<hex>[\da-f]{2,})"; Match mHex = System.Text.RegularExpressions.Regex.Match(retString, pttnSymbolMark); if (mHex.Success) { hexNumber = mHex.Groups["hex"].Value; } return(mHex.Success); }