powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как присвоить шестнадцатиричное число к переменной типа integer?
5 сообщений из 30, страница 2 из 2
Как присвоить шестнадцатиричное число к переменной типа integer?
    #38638289
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7m,

Поправка

Код: sql
1.
  J= position(substring(VAR16 from L for 1),LSTR)-1;
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #38638552
m7m,

Ваш вариант
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
begin
  M = 1;
  RESULT = 0;
  LSTR = '0123456789ABCDEF';
  L = char_length(trim(VAR));
  while (L > 0) do
  begin
    J = position(substring(VAR from L for 1), LSTR) - 1;
    RESULT = RESULT + J * M;
    M = M * 16;
    L = L - 1;
  end
  suspend;
end


Эта процедура мне была нужна давно еще в версии 1.5,
посему функции Char_Length, Position отсутствовали.
Переписал на 2.1.
Если не Тримнуть строку, то Char_Length возвращает длину переменной, а не реальной строки.
Правда, может из-за диалекта (первый).
Мой вариант
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
begin
  RESULT = 0;
  LSTR = '0123456789ABCDEF';
  NUMBCHAR = char_length(trim(VAR));
  I = 1;
  while (NUMBCHAR > I) do
  begin
    J = position(substring(VAR from I for 1), LSTR) - 1;
    RESULT = (RESULT + J) * 16;
    I = I + 1;
  end
  J = position(substring(VAR from I for 1), LSTR) - 1;
  RESULT = RESULT + J;
  suspend;
end


Оба решения имеют право на жизнь. Только, строго говоря, они справедливы для версий ФБ от 2.1
ну и если исходить из эффективности, то в Вашем алгоритме присутствует практически та же самая степень числа.
Т.е. М необходимо считать в каждом цикле.
Если считать "прямым ходом", то необходимость в этом отпадает.

С уважением.
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #38639128
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любитель плоской землиm7m,
Если не Тримнуть строку, то Char_Length возвращает длину переменной, а не реальной строки.
Правда, может из-за диалекта (первый).

Не из-за диалекта, а из-за типа переменной
Объяви её как VarChar и "тримить" возможно не прийдется

зы. и большая просьба обращаться на "ты"
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #38639249
m7m,
VarChar - помогло))
У мну просто переменная сидела на домене... Не обратил внимания. А ты в cxGride не силен? А то начал копаться с Level ами...
И есть проблемки...
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #38639277
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любитель плоской землиm7m,
VarChar - помогло))
У мну просто переменная сидела на домене... Не обратил внимания. А ты в cxGride не силен? А то начал копаться с Level ами...
И есть проблемки...
нет не силен
...
Рейтинг: 0 / 0
5 сообщений из 30, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как присвоить шестнадцатиричное число к переменной типа integer?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]