最近做串口通信,要用到十六進制批量轉ASCII。網上找了半天C#的代碼,
只有單個轉換的的,沒找到自己需要的代碼。只好自己寫一個了。
代碼如下:
//觸發事件
private void button1_Click(object sender,EventArgs e)
{
textBox2.Text= HexStringToASCII(textBox1.Text);
}
/// <summary>
/// 將一條十六進制字符串轉換為ASCII
/// </summary>
/// <param name="hexstring">一條十六進制字符串</param>
/// <returns>返回一條ASCII碼</returns>
public static string HexStringToASCII(string hexstring)
{
byte[] bt = HexStringToBinary(hexstring);
string lin = "";
for (int i = 0; i < bt.Length; i++)
{
lin = lin + bt[i] + " ";
}
string[] ss = lin.Trim().Split(new char[] { ' ' });
char[] c = new char[ss.Length];
int a;
for (int i = 0; i < c.Length; i++)
{
a = Convert.ToInt32(ss[i]);
c[i] = Convert.ToChar(a);
}
string b = new string(c);
return b;
}
/**/
/// <summary>
/// 16進制字符串轉換為二進制數組
/// </summary>
/// <param name="hexstring">用空格切割字符串</param>
/// <returns>返回一個二進制字符串</returns>
public static byte[] HexStringToBinary(string hexstring)
{
string[] tmpary = hexstring.Trim().Split(' ');
byte[] buff = new byte[tmpary.Length];
for (int i = 0; i < buff.Length; i++)
{
buff[i] = Convert.ToByte(tmpary[i], 16);
}
return buff;
}
比如輸入:41 42 25
得到結果:AB%
總結:關於十六進制字符串轉ASCII碼,正常的話,幾句代碼就搞定。雖然並不復雜,但是其實代碼還是挺多的,就是因為多了批量兩個字。希望能幫到大家,也歡迎提出寶貴意見,以更優化代碼。