我有一个FixMessage
,我想手动计算校验和。
8=FIX.4.2|9=49|35=5|34=1|49=ARCA|52=20150916-04:14:05.306|56=TW|10=157|
此处计算体长:
8=FIX.4.2|9=49|35=5|34=1|49=ARCA|52=20150916-04:14:05.306|56=TW|10=157|
0 + 0 + 5 + 5 + 8 + 26 + 5 + 0 = 49(correct)
校验和为 157 (10=157)。在这种情况下如何计算?
你需要将消息中的每个字节相加,但不包括校验和字段。然后将这个数字取模 256,并将其打印为 3 个字符的数字,并带有前导零(例如,校验和 = 13 将变为 013)。
来自 FIX wiki 的链接:FIX 校验和
C 中的示例实现,取自onixs.biz:
char *GenerateCheckSum( char *buf, long bufLen )
{
static char tmpBuf[ 4 ];
long idx;
unsigned int cks;
for( idx = 0L, cks = 0; idx < bufLen; cks += (unsigned int)buf[ idx++ ] );
sprintf( tmpBuf, "%03d", (unsigned int)( cks % 256 ) );
return( tmpBuf );
}
“对消息中的每个字节求和”。在这种情况下你能写出来吗?
我还是不明白那个例子。我写c#。如果我有一个 FixMessage:{8=FIX.4.29=4935=534=149=ARCA52=20150916-04:14:05.30656=TW10=157}。如何数到157?
@ANguyen Quickfix 是一个可以为您生成 FIX 消息的库。FIX 消息是由ASCII 字符组成的字符串。为了计算校验和,1/ 消息中直到校验和字段的每个字节相加 2/ 取该和的模 256 3/ 将该数字打印为带有前导零的 3 个字符的数量。我不能说更简单。您不能简单地在此处转储 FIX 消息并期望我们为您计算它。您可以要求 QuickFIX 库或任何其他 FIX 引擎为您做这件事。
@ANguyen 对我来说,我已经很久没有完成任何 C# 编码了,而且我不精通 QuickFIX/N。考虑将字符串转换为字节流或字节数组(ASCII 编码)。将数组或流中的每个字节相加为无符号整数。然后取总数的模 256 并将其打印为带有前导零的 3 个字符串。
当我编译该示例 C 程序并使用 wiki 页面测试用例时,它给了我 70,而不是 wiki 所说的 65