一、字符串转换为16进制字节数组的步骤
1、将字符串按每两个字符拆分并插入逗号为分隔符;
2、将拆分后的字符串分离为字符串数组;
3、将字符串数组转换成字节数组并检测字符是否合法;
4、将合法转换后的字节数组输出;
二、将16进制数字节数组转换为字符串
1、确定是否需要在字节之间插入空格或其他特殊符号;
2、将字节数据转换为字符;
3、将转换后的字符串连接起来;
4、将连接后的字符串输出;
三、代码
//字符串转换为16进制字节数组 private byte[] TranslateStringToHexArray(string AsciiString) { int cnt = 0; string inputAsciiArray= ""; //1、将字符串按每两个字符拆分并插入逗号为分隔符 for (int i = 0; i < AsciiString.Length; i++) { char temp = AsciiString[i]; if(temp!=' ') { inputAsciiArray += temp; cnt++; if (cnt >= 2) { cnt = 0; inputAsciiArray += ","; } } } //2、将拆分后的字符串分离为字符串数组 string[] bStringArray = inputAsciiArray.Split(new char[] { ',', ' ' }); cnt=0; for (int i = 0; i < bStringArray.Length; i++) { if (bStringArray[i].Trim() != "") cnt++; } byte[] bArray1=new byte[cnt]; cnt = 0; //3、将字符串数组转换成字节数组并检测字符是否合法 for (int i = 0; i < bStringArray.Length; i++) { if (bStringArray[i].Trim() != "") { try { bArray1[i] = Convert.ToByte(bStringArray[i].Trim(), 16); cnt++; } catch (Exception E) //发生错误时提示非法字符 { //string ErrMsg = " " + bStringArray[i] + " " + E.Message; string ErrMsg = " 第 " +(i*2+1).ToString() + " 个字符 "+ bStringArray[i] +" 非法 \r\n" + E.ToString(); MessageBox.Show(ErrMsg, "提示"); break; } } } //4、将合法转换后的字节数组输出 byte[] bArray2 = new byte[cnt]; for (int i = 0; i < cnt; i++) { bArray2[i]=bArray1[i]; } return bArray2; }
//字节数组转换为字符串 private string TranslateHexArrayToString(byte[] InputByteArray,bool AddBlankFlag) { string HexString = ""; if (AddBlankFlag == true) //确定是否需要插入特殊符号 { for (int i = 0; i < InputByteArray.Length; i++) { HexString += InputByteArray[i].ToString("X2")+ " "; //字节数据转换为字符(并插入空格) } } else //字符串终字节间不插入空格 { for (int i = 0; i < InputByteArray.Length; i++) { HexString += InputByteArray[i].ToString("X2"); //字节数据转换为字符 } } return HexString; }