Laden...

Steuerzeichen umwandeln

Erstellt von steffen_dec vor 13 Jahren Letzter Beitrag vor 13 Jahren 6.548 Views
S
steffen_dec Themenstarter:in
322 Beiträge seit 2007
vor 13 Jahren
Steuerzeichen umwandeln

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