ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Example of changing .NET Data to the type that the user wants
    IT Story/C# & WPF 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;
            }
    반응형

    댓글

Designed by Tistory.