Как преобразовать шестнадцатеричные данные (хранящиеся в строковой переменной) в целочисленное значение - PullRequest
0 голосов
/ 16 января 2019

Редактировать (аннотация)

Я пытался интерпретировать Char / String данные как Byte, 4 байта за раз. Это потому, что я мог только TComport / TDatapacket интерпретировать потоковые данные как String, а не как любой другой тип данных. Я до сих пор не знаю, как заставить метод Read и обработчик событий OnRxBuf работать с TComport.

Краткое описание проблемы

Я пытаюсь получить данные с масс-спектрометра (MS), используя некоторый код Delphi. Прибор подключен через последовательный кабель и следует протоколу RS232. Я могу без проблем отправлять команды и обрабатывать текстовые выходные данные от MS, но у меня возникают проблемы с интерпретацией буфера данных.

Фон

Из руководства пользователя этого инструмента:

"За исключением значений ионного тока, на выходе RGA находятся символьные строки ASCII, оканчивающиеся символом перевода строки + возврат каретки. Ионные сигналы представляются как целые числа в единицах 10 ^ -16 А и передаются непосредственно в шестнадцатеричный формат (четырехбайтовые целые числа, формат дополнения 2, сначала наименее значимый байт) для максимальной пропускной способности."

Я не уверен, можно ли правильно хранить шестнадцатеричные данные (1) в строковой переменной. Я также не уверен, как (2) реализовать дополнение 2 в Delphi и (3) сначала наименее значимый байт.

1 Ответ

0 голосов
/ 17 января 2019

Следуя совету Дэвида Хеффернана, я пошел и пересмотрел свои типы данных. Попытка собрать двоичные данные из символов не работает, потому что не все значения от 0 до 255 могут быть правильно представлены. Вы теряете данные по пути, в основном. Тем более что ваши данные представлены 4 байтами за раз.

Решением для меня было использование компонента Async Professional вместо библиотеки Denjan Comport lib. Он лучше обрабатывает потоки данных и имеет встроенный журнал, который я мог бы использовать, чтобы выяснить, как интерпретировать потоковые данные с инструмента. Это также лучше задокументировано. Итак, если вы новичок в последовательной связи (как и я), лучше попробуйте.

...