FIX 消息分隔符

Posted

技术标签:

【中文标题】FIX 消息分隔符【英文标题】:FIX message delimiter 【发布时间】:2014-10-07 05:31:26 【问题描述】:

我对 FIX-Protocol 比较陌生。

FIX-Protocol 消息的分隔符有时显示 ^,有时显示 |。 FIX-Protocol 的***说 [SOH]Start of Header> for hex 0x01)是字符。

请解释一下意思。

例如,FIX-Protocol 消息可以在视觉上表示为

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) 适合 ^ 或 |

它可能是数字 ONE。

【问题讨论】:

【参考方案1】:

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

【讨论】:

因此,这意味着,在线/套接字/网络上的真正修复消息将不包含 |或 ^ 字符,但只有 0x01,但是,一旦脱线,0x01 将被 | 中的一个替换。或 ^ 字符。我可能在这里偏离目标,但非常感谢您的帮助。 是的,请参阅fixwiki.org/fixwiki/FPL:Tag_Value_Syntax 以了解有关格式的说明。查看 quickfix 的源代码,它也使用 0x01 作为分隔符。 还有一点需要补充——我经常在日志文件中看到 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... .【参考方案2】:

FIX 消息的字段之间总是有 0x01,无论是在线上、OMS/EMS 中还是日志文件中。只有当必须显示消息时才会进行替换(好吧,有些人可能会清理他们的日志文件并转录字符)。有效的 FIX 消息永远不会有管道或插入符号分隔字段。同样的情况是,FIX 消息永远不会在字段之间存在任何位置。 ( 是一个不应出现在打印文本中的字符 - FIX 消息应该是可读的 - 它不会与终止 C 字符串的字符冲突,因此如果您愿意,可以将整个消息视为字符串.)

【讨论】:

【参考方案3】:

使用| 字符只是为了视觉方便,比^A 更容易阅读

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

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

~/.bashrc

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

那么简单

fixlog your.file.fix

【讨论】:

以上是关于FIX 消息分隔符的主要内容,如果未能解决你的问题,请参考以下文章

自定义分隔符解码器04

EDI X12 版本 4010 消息 - 非复合元素可以包含子元素分隔符吗?

java中的重复分隔符与数组的损坏消息

带有分隔符的颤振组列表视图

T-SQL 将存在于另一个字段中的连字符分隔值的平均值放入一个字段中

Netty解码器