Интерпретация строки Python (FIX), полученной по сети, в двоичном виде
Я отправляю сообщение об исправлении через сокетное соединение и получаю в клиенте Python. Я знаю, что SOH разделяет каждую пару имя = значение в данных. Но данные при печати (в виде строки) не показывают SOH. Проблема возникает из-за того, что я хочу показать "|" или я не могу сказать в регулярном выражении, каковы границы для отдельных полей. Я посмотрел на decode('hex'), decode('uu') на полученной строке, но без особого успеха. Также для распаковки / распаковки необходимо указать строку формата (что я должен был бы сделать для каждого типа исправления).
Я использую Twisted ClientFactory для клиента.
Какие-либо предложения?
Контрольный вопрос: я использую repr и передаю его функции, чтобы заменить '\x01' на '|'. Теперь, когда я передаю данные, полученные из сети напрямую, замена, кажется, не влияет. Однако, когда я копирую вывод и передаю его как строковый литерал в ту же функцию. Он ведет себя как ожидалось (заменяет '\x01' на '|'). Я также попытался использовать re.sub с точно такими же результатами (работает, когда передается как строковый литерал, но не когда передается непосредственно из сети). Я также распечатал значение из сети в файл и сравнил с помощью шестнадцатеричного редактора vi строковый литерал. Это не показывает никаких отличий.
Некоторая дополнительная информация: Когда я печатаю значение из файла и читаю его обратно, я не могу использовать find для '\x01', подразумевая, что замена также не будет работать (это не так). Когда я пытаюсь преобразовать это в байтовый массив, может показаться, что каждый из '\', 'x', '0', '1' интерпретируется как разные байты, когда я перебираю байтовый массив. Что странно. либо \ x01 является строкой, либо нет и является шестнадцатеричной.
Какие-либо предложения?
Спасибо
2 ответа
Может показаться, что замена с помощью '\x01' работает с данными, поступающими по сети (а не с выводом repr). Я не уверен, в чем причина, но это отвечает моим требованиям.
Распечатка репр по предложению Игнасио Васкеса-Абрамса решает часть проблемы.