FIX消息分隔符

23

我对FIX协议相对较新。

FIX协议消息的分隔符有时显示为^,有时显示为|。 维基百科对于FIX协议说[SOH] (对于十六进制0x01的<标题开始>)是该字符。

请解释一下同样的含义。

例如,FIX协议消息可以被可视化地表示为

8=FIX.4.4^9=122^35=D^34=215^49=CLIENT12^52=20100225-19:41:57.316^56=B^1=Marcel^11=13346^21=1^40=2^44=5^54=1^59=0^60=20100225-19:39:52.020^10=072^
或者
8=FIX.4.4|9=122|35=D|34=215|49=CLIENT12|52=20100225-19:41:57.316|56=B|1=Marcel|11=13346|21=1|40=2|44=5|54=1|59=0|60=20100225-19:39:52.020|10=072|

那么使用 ^ 和 | 有什么区别呢?还有其他分隔符可用吗。不清楚为什么[SOH] (0x01)适用于 ^ 或 |。

它本可以是数字1。

3个回答

20

分隔符SOH = ASCII代码01是一个不可打印字符。查看消息的二进制表示(例如在十六进制编辑器视图中),您会将该字符表示为0x01。为了显示消息,似乎有些人使用|,而其他人则使用^,这些都是很少使用的字符,因此是很好的分隔符。


4
这意味着,在数据线/套接字/网络上传输的真实修复信息中,不会包含字符 | 或 ^,只有 0x01,但是一旦离开数据线,0x01 就会被替换为其中一个 | 或 ^ 字符。我可能理解偏差,请您帮助确认。 - Ashley
是的,请参阅http://fixwiki.org/fixwiki/FPL:Tag_Value_Syntax了解格式的描述。查看quickfix的源代码,它还使用0x01作为分隔符。 - MP24
3
另外还有一点需要补充-我经常在日志文件中看到rax消息。在Linux上,SOH通常会显示为C转义码^A,例如:8=FIX.4.2^A9=207^A35=D^A43=N^A52=20140825-07:24:08^A122=20140825-07:24:08^A...。 - Andy Lynch

6

使用 | 字符只是出于视觉上的方便,比使用 ^A 更易读。

cat your.file.fix | tr '\01' '|' | less

您可以轻松将上述命令转换为自定义shell脚本,以打开FIX会话文件。

~/.bashrc

function fixlog {
  cat $* | tr '\01' '|' | less
}

那么,只需简单地
fixlog your.file.fix

1

FIX消息中每个字段之间总是有0x01字符作为分隔符,无论是在网络中传输、OMS/EMS系统中还是日志文件中。仅当需要显示消息时才会进行替换(好吧,某些人可能会清理日志文件并转录该字符)。有效FIX消息永远不会使用管道符或脱字符号分隔字段。同时,FIX消息中绝不应出现除字段之外的其他字符。(“<”是一种不应出现在打印文本中的字符 - FIX消息应易于阅读 - 并且它不会与终止C字符串的“>”冲突,因此如果您愿意,整个消息可以被视为一个字符串。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接