Beschreibung:
Hiermit können Steuerzeichen in druckbare Zeichen wie z.B. {STX} umgewandelt werden damit man diese besser lesen/anzeigen kann. Die Umwandlung ist auch umgekehrt möglich.
private const char ControlCharStart = '{';
private const char ControlCharEnd = '}';
private enum EControlChars : byte
{
NUL = 0,
SOH = 1,
STX = 2,
ETX = 3,
EOT = 4,
ENQ = 5,
ACK = 6,
BEL = 7,
BS = 8,
HT = 9,
LF = 10,
VT = 11,
FF = 12,
CR = 13,
SO = 14,
SI = 15,
DLE = 16,
DC1 = 17,
DC2 = 18,
DC3 = 19,
DC4 = 20,
NAK = 21,
SYN = 22,
ETB = 23,
CAN = 24,
EM = 25,
SUB = 26,
ESC = 27,
FS = 28,
GS = 29,
RS = 30,
US = 31
}
public string ToControlChars(string sString)
{
string sRet = "";
byte btChar;
int btMaxControlChar = Enum.GetValues(typeof(EControlChars)).GetUpperBound(0);
int btMinControlChar = Enum.GetValues(typeof(EControlChars)).GetLowerBound(0);
for (int i = 0; i < sString.Length; i++ )
{
btChar = (byte)sString[i];
if (btChar <= btMaxControlChar && btChar >= btMinControlChar)
{
sRet += ControlCharStart + ((EControlChars)btChar).ToString() + ControlCharEnd;
}
else
{
sRet += sString[i];
}
}
return sRet;
}
public string FromControlCharsToString(string sString)
{
string sRet = "";
string sControlChar = "";
bool bControlCharStarted = false;
for (int i = 0; i < sString.Length; i++)
{
switch (sString[i])
{
case ControlCharStart:
//sControlChar = sString[i].ToString();
sControlChar = "";
bControlCharStarted = true;
break;
case ControlCharEnd:
//sControlChar += sString[i];
bControlCharStarted = false;
if (Enum.IsDefined(typeof(EControlChars), sControlChar))
{
//defined
sRet += (char)(byte)(Enum.Parse(typeof(EControlChars), sControlChar));
}
else
{
//not defined!
sRet += ControlCharStart + sControlChar + ControlCharEnd;
}
break;
default:
if (!bControlCharStarted)
{
sRet += sString[i];
}
else
{
sControlChar += sString[i];
}
break;
}
}
return sRet;
}
Schlagwörter: Steuerzeichen, ControlChars, Serielle Schnittstelle, SOH, ETX, ASCII