Сравнение hex строк

Темы связанные с инженерными разработками, но не подходящие в другие ветки форума
Ответить
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

Сравнение hex строк

Сообщение Kosist »

Уважаемые форумчане,

помогите, пожалуйста, со следующим вопросом.
Как можно сравнить hex строки между собой? Есть полученное значение, и есть два значения-лимиты. Как можно сравнить, находится ли значение в данных лимитах?

Загвоздка в конвертации строки в число. Если шестнадцатиричные строки одинаковой длинны, сравнивать получается. Если разной - сравнение неправильное.

Например, так:
Нижний лимит: 1194h (4500d)
Верхний лимит: 15Е0h (5600d)
Число сравнения: 12C0h (4800d)

Сравнение работает правильно.

Но вот так:
Нижний лимит: 96h (150d)
Верхний лимит: 15Е0h (5600d)
Число сравнения: 12C0h (4800d)

сравнение не работает. Но если нижний лимит записать как 0096h, то сравнение работает.

Как поступать в данном случае?
Конвертировать строку в число правильно не всегда получается, т.к. используя различные типы чисел (U8, U16, U32, U64), как это показано здесь - http://forums.ni.com/t5/LabVIEW/Convert ... -p/1498168 -можно получить различный результат, в зависимости от типа числа, в который переводится шестнадцатиричная строка...

Думаю, что все здесь просто, но решение найти не получается...

Заранее спасибо!
Вложения
hex comparison.png
hex comparison.png (13.89 КБ) 4644 просмотра
Мы делили апельсин - много наших полегло...
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: Сравнение hex строк

Сообщение IvanLis »

Kosist писал(а):Конвертировать строку в число правильно не всегда получается, т.к. используя различные типы чисел (U8, U16, U32, U64)
По идее Вам сравнивать нужно не строку, а что она несет, т.е. информацию закодированную ею.
А значит Вы должны однозначно знать, что за тип данных нужно получить на выходе, и соответственно в него и конвертировать.

Kosist писал(а):Нижний лимит: 96h (150d)
Верхний лимит: 15Е0h (5600d)
Число сравнения: 12C0h (4800d)

сравнение не работает. Но если нижний лимит записать как 0096h, то сравнение работает.
Если же Вас устраивает такой вариант, то можно просто добивать строку нулями до максимальной из трех длины.
Untitled 1.vi
lv2010
(10.58 КБ) 147 скачиваний
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

Re: Сравнение hex строк

Сообщение Kosist »

Спасибо за подсказку! Но, наверное, как Вы и сказали, лучше сравнивать информацию - число - которую несет эта hex строка... Буду пробовать )
Мы делили апельсин - много наших полегло...
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

Re: Сравнение hex строк

Сообщение Kosist »

В продолжение поста.

Все оказалось намного проще.
Я игрался с функцией Type Cast; а нужно было из обычной Hex String to Number... Она конвертирует все правильно :think: Только на вход нужно подавать строку в нормально виде, но текст должен отображать hex-значение...
Вложения
Conversion.png
Conversion.png (16.5 КБ) 4567 просмотров
Мы делили апельсин - много наших полегло...
Ответить

Вернуться в «Общие»