Calculate checksum for Laboratory Information System (LIS) frames

c#, checksum

Solution

Finally I got answer, here is the code for calculating checksum:

private string CalculateChecksum(string dataToCalculate)
{
    byte[] byteToCalculate = Encoding.ASCII.GetBytes(dataToCalculate);
    int checksum = 0;
    foreach (byte chData in byteToCalculate)
    {
        checksum += chData;
    }
    checksum &= 0xff;
    return checksum.ToString("X2");
}

Problem

I'm developing an instrument driver for a Laboratory Information System. I want to know how to calculate the checksum of a frame. Explanation of the checksum algorithm: Expressed by characters [0-9] and [A-F]. Characters beginning from the character after [STX] and until [ETB] or [ETX] (including [ETB] or [ETX]) are added in binary. The 2-digit numbers, which represent the least significant 8 bits in hexadecimal code, are converted to ASCII characters [0-9] and [A-F]. The most significant digit is stored in CHK1 and the least significant digit in CHK2. I am not getting the 3rd and 4th points above. This is a sample frame: ``` <STX>2Q|1|2^1||||20011001153000<CR><ETX><CHK1><CHK2><CR><LF> ``` What is the value of `CHK1` and `CHK2`? How do I implement the given algorithm in C#?

Original source