计算临床仪器的校验和
Calculate checksum for clinical instrument
我需要计算分析实验室仪器的校验和。我有这个例子:
我正在使用取自此 post 的方法:
Calculate checksum for Laboratory Information System (LIS) frames
这是示例中计算校验和的代码:
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");
}
这是我用来做图像测试的代码:
string cStringStx = ((char)02).ToString();
string cStringEtx = ((char)03).ToString();
string cStx = CalculateChecksum(cStringStx);//Result: 02
string c1 = CalculateChecksum("1");//Result: 31
string cT = CalculateChecksum("T");//Result: 54
string cE = CalculateChecksum("e");//Result: 65
string cS = CalculateChecksum("s");//Result: 73
string cT2 = CalculateChecksum("t");//Result: 74
string cEtx = CalculateChecksum(cStringEtx);//Result: 03
int nSum = Convert.ToInt16(cStx) +
Convert.ToInt16(c1) +
Convert.ToInt16(cT) +
Convert.ToInt16(cE) +
Convert.ToInt16(cS) +
Convert.ToInt16(cT2) +
Convert.ToInt16(cEtx);//Result: 302
string cTot = CalculateChecksum(cStx + c1 + cT + cE + cS + cT2 + cEtx);//Result: D2
各个字符串的校验和正确,但总和不正确。 cTot 应该是 D4,而不是 D2。我做错了什么?
好吧,您似乎想 跳过 初始 [STX]
字符 (\u0002
),同时对所有其他字符求和。您可以借助 Linq:
using System.Linq;
...
private static int CheckSum(string value) {
return value == null
? 0
: value.SkipWhile(c => c == 2).Sum(c => c) & 0xFF;
}
演示:
string test = "\u00021Test\u0003";
int sum = CheckSum(test);
Console.Write(sum.ToString("X2"));
结果:
D4
我需要计算分析实验室仪器的校验和。我有这个例子:
我正在使用取自此 post 的方法: Calculate checksum for Laboratory Information System (LIS) frames
这是示例中计算校验和的代码:
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");
}
这是我用来做图像测试的代码:
string cStringStx = ((char)02).ToString();
string cStringEtx = ((char)03).ToString();
string cStx = CalculateChecksum(cStringStx);//Result: 02
string c1 = CalculateChecksum("1");//Result: 31
string cT = CalculateChecksum("T");//Result: 54
string cE = CalculateChecksum("e");//Result: 65
string cS = CalculateChecksum("s");//Result: 73
string cT2 = CalculateChecksum("t");//Result: 74
string cEtx = CalculateChecksum(cStringEtx);//Result: 03
int nSum = Convert.ToInt16(cStx) +
Convert.ToInt16(c1) +
Convert.ToInt16(cT) +
Convert.ToInt16(cE) +
Convert.ToInt16(cS) +
Convert.ToInt16(cT2) +
Convert.ToInt16(cEtx);//Result: 302
string cTot = CalculateChecksum(cStx + c1 + cT + cE + cS + cT2 + cEtx);//Result: D2
各个字符串的校验和正确,但总和不正确。 cTot 应该是 D4,而不是 D2。我做错了什么?
好吧,您似乎想 跳过 初始 [STX]
字符 (\u0002
),同时对所有其他字符求和。您可以借助 Linq:
using System.Linq;
...
private static int CheckSum(string value) {
return value == null
? 0
: value.SkipWhile(c => c == 2).Sum(c => c) & 0xFF;
}
演示:
string test = "\u00021Test\u0003";
int sum = CheckSum(test);
Console.Write(sum.ToString("X2"));
结果:
D4