一、字符串转换为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;
        }

16进制转字符串原理(16进制数与字符串的互换)(1)

16进制转字符串原理(16进制数与字符串的互换)(2)