IT Story/C# & WPF

Example of changing .NET Data to the type that the user wants

Hoyami7 2022. 6. 19. 21:20
반응형

Functions for type conversion between ASCII and Binary and Decimal.

Please use it.

public string funAscStringConvert(string sData, EnuCommunication.StringType StringType)
        {
            string sReturn = string.Empty;
            string sTemp = string.Empty;
            int nTemp = 0;

            try
            {
                switch (StringType)
                {
                    //ASCII Data(AB) => Binary Data(0100 0001 0100 0010)
                    case Common.EnuCommunication.StringType.Binary:
                        sReturn = funAscStringConvert(sData, Common.EnuCommunication.StringType.Hex); //ASC를 HEX로 바꾼다.
                        sReturn = funHexConvert(sReturn, Common.EnuCommunication.StringType.Binary); //HEX를 Bynary로 바꾼다.
                        break;

                    //ASCII Data(AB) => Decimal Data(16706)
                    case Common.EnuCommunication.StringType.Decimal:
                        sReturn = funAscStringConvert(sData, Common.EnuCommunication.StringType.Hex); //ASC를 HEX로 바꾼다.
                        sReturn = funHexConvert(sReturn, Common.EnuCommunication.StringType.Decimal);//HEX를 10진수로 바꾼다.
                        break;

                    //ASCII Data(AB) => Hex Data(4142)
                    case Common.EnuCommunication.StringType.Hex:
                        for (int i = 0; i < sData.Length; i++)
                        {
                            char c = Convert.ToChar(sData.Substring(i, 1));
                            nTemp = Convert.ToInt32(c);                          //아스키한문자를 10진수 ASC코드(65)로 변환한다.
                            sTemp = string.Format("{0:X2}", nTemp);           //10진수를 2자리를 맞춘 16진수로 바꾼다.
                            sReturn += sTemp;
                        }
                        break;

                    //ASCII Data(AB) => ASC Code(6566)
                    case Common.EnuCommunication.StringType.ASCCode:
                        for (int i = 0; i < sData.Length; ++i)
                        {
                            char c = Convert.ToChar(sData.Substring(i, 1));
                            nTemp = Convert.ToInt32(c);                         //아스키한문자를 10진수 ASC코드로 변환한다.
                            sTemp = string.Format("{0:D2}", nTemp);          //10진수를 10진수 2자리 문자로 바꾼다.
                            sReturn += sTemp;
                        }
                        break;

                    default:
                        sReturn = sData;
                        break;
                }
            }
            catch
            {
                //this.m_Info.Set_Log(Common.EnuCommon.LogType.CIM, ex.ToString() + ", sData:" + sData);
            }
            return sReturn;
        }

        /// <summary>
        /// HEX Data를 원하는 Data로 변경
        /// </summary>
        /// <param name="sData"></param>
        /// <param name="StringType"></param>
        /// <returns></returns>
        public string funHexConvert(string sData, Common.EnuCommunication.StringType StringType)
        {
            string sReturn = string.Empty;
            string sTemp = string.Empty;
            int nTemp = 0;
            try {
                switch (StringType) {
                    //Hex Data(4142) => Binary Data(0100 0010 0100 0001)
                    case Common.EnuCommunication.StringType.Binary:
                        for (int i = 0; i < sData.Length; i++) {
                            string c = Convert.ToString(sData.Substring(i, 1));
                            nTemp = Convert.ToInt32(c, 16);                               //16진수를 10진수로 변환
                            sTemp = Convert.ToString(nTemp, 2);                        //10진수를 2진수로 바꾼다.
                            sTemp = string.Format("{0:0000}", Convert.ToInt32(sTemp)); //앞에 0이 붙는 4자리의 2진수로 바꾼다.

                            sReturn += sTemp;
                        }
                        break;
                    //Hex Data(4142) => Decimal Data(16706)
                    case Common.EnuCommunication.StringType.Decimal:
                        sTemp = Convert.ToInt32(sData, 16).ToString();
                        sReturn = sTemp;
                        break;
                    //Hex Data(4142) => ASC String(AB)
                    case Common.EnuCommunication.StringType.ASCString:
                        for (int i = 0; i < sData.Length; i = i + 2) {
                            string c = Convert.ToString(sData.Substring(i, 2));            //2개씩 끊어 읽어온다.
                            nTemp = Convert.ToInt32(c, 16);                               //16진수를 10진수로 변환한다.
                            byte d = Convert.ToByte(sTemp);                               //10진수를 Byte형태로 전환
                            sTemp = Convert.ToString(Convert.ToChar(d));                  //Byte형태의 10진수를 ASC 문자로 변환한다.
                            sReturn += sTemp;
                        }
                        break;
                    //Hex Data(4142) => ASC Code(6566)
                    case Common.EnuCommunication.StringType.ASCCode:
                        for (int i = 0; i < sData.Length; i = i + 2) {
                            string c = Convert.ToString(sData.Substring(i, 2));           //2개씩 끊어 읽어온다.
                            nTemp = Convert.ToInt32(c, 16);                              //16진수를 10진수로 변환한다.
                            sTemp = string.Format("{0:D2}", nTemp);                   //10진수를 10진수 2자리 문자로 바꾼다.
                            sReturn += sTemp;
                        }
                        break;
                    default:
                        sReturn = sData;
                        break;
                }
            }
            catch {
               // this.m_Info.Set_Log(Common.EnuCommon.LogType.CIM, ex.ToString() + ", sData:" + sData + ", StringType:" + StringType);
            }
            return sReturn;
        }
반응형