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;
}
반응형