?? geshi轉換算法.cs
字號:
?using System;
using System.Text;
namespace Lz.算法
{
public class GeShi轉換算法
{
#region 其他函數
/// <summary>
/// 把Enum16進制隔離符轉換成實際的字符串
/// </summary>
/// <param name="enum16">Enum16進制隔離符</param>
/// <returns></returns>
private static string AddGeLi(Enum16進制隔離符 enum16)
{
switch (enum16)
{
case Enum16進制隔離符.無:
return "";
case Enum16進制隔離符.Ox:
return "0x";
case Enum16進制隔離符.OX:
return "0X";
case Enum16進制隔離符.空格:
return " ";
default:
return "";
}
}
/// <summary>
/// 去掉16進制字符串中的隔離符
/// </summary>
/// <param name="inString">需要轉換的字符串</param>
/// <returns></returns>
private static string DelGeLi(string inString)
{
string outString = "";
string[] del = { " ", "0x", "0X" };
if (inString.Contains(" ") || inString.Contains("0x") || inString.Contains("0X"))//存在隔離符
{
string[] strS = inString.Split(del, System.StringSplitOptions.RemoveEmptyEntries);//以隔離符進行轉換數組,去掉隔離符,去掉空格。
for (int i = 0; i < strS.Length; i++)
{
outString += strS[i].ToString();
}
return outString;
}
else//不存在隔離符
{
return inString;
}
}
#endregion
#region 漢字、英文、純16進制數、byte[],之間的各種轉換函數。
/// <summary>
/// 字符串轉換成16進制
/// </summary>
/// <param name="inSting"></param>
/// <param name="enum16"></param>
/// <returns></returns>
public static string StringTo16(string inSting,Enum16進制隔離符 enum16)
{
string outString = "";
byte[] bytes = Encoding.Default.GetBytes(inSting);
for (int i = 0; i < bytes.Length; i++)
{
int strInt = Convert.ToInt16(bytes[i] - '\0');
string s = strInt.ToString("X");
if (s.Length == 1)
{
s = "0" + s;
}
s = AddGeLi(enum16) + s;
outString += s;
}
return outString;
}
/// <summary>
/// 字符串轉換成byte[]
/// </summary>
/// <param name="inSting"></param>
/// <returns></returns>
public static byte[] StringToBtyes(string inSting)
{
inSting = StringTo16(inSting,Enum16進制隔離符.無);//把字符串轉換成16進制數
return _16ToBtyes(inSting);//把16進制數轉換成byte[]
}
/// <summary>
/// 把16進制字符串轉換成byte[]
/// </summary>
/// <param name="inSting"></param>
/// <returns></returns>
public static byte[] _16ToBtyes(string inSting)
{
inSting= DelGeLi(inSting);//去掉隔離符
byte[] strBt = new byte[inSting.Length / 2];
for (int i = 0, j = 0; i < inSting.Length; i = i + 2, j++)
{
string s = inSting.Substring(i, 2);
try
{
strBt[j] = (byte)Convert.ToInt16(s, 16);
}
catch (Exception e)
{
throw new Exception("你填寫的數據不是純16進制數,請檢查。");
}
}
return strBt;
}
/// <summary>
/// 把16進制字符串變成英文數字和漢字混合的格式。
/// </summary>
/// <param name="str">需要轉換的16進制字符串</param>
/// <returns>轉換好的字符串</returns>
public static string _16ToString(string inSting)
{
inSting = DelGeLi(inSting);
return Encoding.Default.GetString(_16ToBtyes(inSting));
}
/// <summary>
/// 把byte[]轉換成String
/// </summary>
/// <param name="bytes">需要轉換的byte[]</param>
/// <param name="enum16">隔離符</param>
/// <returns></returns>
public static string BytesToString(byte[] bytes,Enum16進制隔離符 enum16)
{
return _16ToString(BytesTo16(bytes,enum16));
}
/// <summary>
/// byte[]轉換成16進制字符串
/// </summary>
/// <param name="bytes">需要轉換的byte[]</param>
/// <param name="enum16"></param>
/// <returns></returns>
public static string BytesTo16(byte[] bytes, Enum16進制隔離符 enum16)
{
string outString="";
for (int i = 0; i < bytes.Length; i++)
{
if (bytes[i].ToString("X").Length < 2)//16進制數為一位時前面填充0
{
outString += AddGeLi(enum16) + "0" + bytes[i].ToString("X");//轉成16進制數據
}
else//
{
outString += AddGeLi(enum16) + bytes[i].ToString("X");//轉成16進制數據
}
}
return outString;
}
/// <summary>
/// 把byte[]直接轉換成字符串,直接以2進制形式顯示出來。
/// </summary>
/// <param name="bytes"></param>
/// <returns></returns>
public static string BytesTo2String(byte[] bytes,Enum16進制隔離符 enum16)
{
string outString = "";
for (int i = 0; i < bytes.Length; i++)
{
string tempString = Convert.ToString(bytes[i], 2);
if (tempString.Length != 8)
{
string add0 = "";
for (int j = 0; j < 8 - tempString.Length; j++)
{
add0 += "0";
}
outString += AddGeLi(enum16) + add0 + tempString;
}
else
{
outString += AddGeLi(enum16) + tempString;
}
}
return outString;
}
#endregion
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -