Неверное форматирование для поля фиксированияC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Неверное форматирование для поля фиксирования

Сообщение Anonymous »

Я пытаюсь получить значения для нескольких полей исправления (Transacttime, Ordid и execid) из сообщений executionErport. Значения, возвращенные Python's Package of QuickFix egine (v1.15.1), являются для меня довольно загадкой: < /p>

Код: Выделить всё

>>> msg.getField(fix.TransactTime()).getString()
\udc82P\udcd2H\nv\x00\x00\x00\x00\x00\x00\x00\x00\x00\x009.67a2fe49.0001
>>> msg.getField(fix.OrdId()).getString()
\udc82P\udcd2H\nv\x00\x00\udcee\udcfb\x1a\udce5\udcefE\x190.22
>>> msg.getField(fix.execId()).getString()
\udc82P\udcd2H\nv\x00\x00\udcee\udcfb\x1a \udce5\udcefE\x19.9
< /code>
msg
является экземпляром QuickFix.message .
Сначала я подозревал, что отправитель неправильно кодировал сообщения. Однако после того, как я обнюхал пакет до его передачи в приложение, я подтвердил, что значения были правильными. Кроме того, после того, как приложение получило сообщение и призвало метод msg.tostring () , поля были возвращены правильно отформатированы, как показано ниже:

Код: Выделить всё

17=18421738839500.9
37=00000af9.000047f9.67a2fe49.0001
60=20250206-10:58:20.228
< /code>
Therefore, fields 17, 37 and 60 (execId, ordId and 60 respectively) are received by the application correctly formatted. However there seems to be some processing going on when directly accessing the fields msg.getField()
, что искажает данные. Имея в виду, что вызов msg.toString () отлично работает, мой первый импульс состоял в том, чтобы перейти в исходный код C ++ QuickFix. v1.15.1 соответствует ревизии 6908DC8C1084EEB7AF7F322D35216E9965684489 .

Код: Выделить всё

toString()
Метод msg.ccp вызовы CalculateString () of fieldmap.ccp. Здесь вы можете оценить, что tofixstring () называется вместо toString () для каждого поля. После вызова tofixstring () более загадочные данные поставляются:

Код: Выделить всё

>>> msg.getField(fix.OrdId()).getFixString()
1327193754=udcac\udced\udca5\udcdf\udcfdz\x00\x00\udc9a^\x1bO\udc85\udcfb\x00\x0b9.67a2fe49.0001\x01
>>> msg.getField(fix.TransactTime()).getFixString()
1327193754=1327193754=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01
>>> msg.getField(fix.execId()).getFixString()
1327193754=1327193754=\x00\x00\x00\x00\x00\x00\x00\x01
< /code>
I could patch this problem by getting the values from the msg.toString()
. Однако, поскольку доступ к значениям для других облач Получите это правильно (что мне не хватает).

Подробнее здесь: https://stackoverflow.com/questions/794 ... fix-fields
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»