-
Example of changing .NET Data to the type that the user wantsIT 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; }
반응형'IT Story > C# & WPF' 카테고리의 다른 글
Example of adding, deleting, and modifying new rows in .NET DataGridView (0) 2022.06.19 .NET Hex Data Swap and Change Address Example (0) 2022.06.19 WPF page Navigation like in MVC (0) 2019.12.25 WPF ComboBox control (0) 2019.12.25 C#으로 만든 Log Class (0) 2019.12.12