powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как присвоить шестнадцатиричное число к переменной типа integer?
30 сообщений из 30, показаны все 2 страниц
Как присвоить шестнадцатиричное число к переменной типа integer?
    #35177894
CougarL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как присвоить число в шестнадцатиричном формате к переменной типа integer?
Функции преобразования не нашел.
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #35177908
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CougarLКак присвоить число в шестнадцатиричном формате к переменной типа integer? Ни-иапонил, на фига...
Или десятичный или НЕХ-код. Храни в стринге.

CougarLФункции преобразования не нашел.
Небось еще и НЕХ-математику хочется...
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #35177927
CougarL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно просто присвоить число в шестнадцатиричном формате переменной типа integer.
Это нужно для простоты последующего чтения кода.
Я то могу перевести шестнадцатиричное число в десятичное и на калькуляторе.
$0AF1 - как мне это число присвоить переменной.
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #35177945
Граур Станислав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
ds.FieldByName('Value').asInteger := $0AF1;


так подойдет ?
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #35177950
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CougarLЭто нужно для простоты последующего чтения кода.
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #35177977
CougarL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Граур Станислав
Код: plaintext
ds.FieldByName('Value').asInteger := $0AF1;


так подойдет ?

Мне это необходимо сделать в теле хранимой процедуры.
CREATE PROCEDURE TEST_PROC
AS
DECLARE VARIABLE COUNT_REC INTEGER;
begin
COUNT_REC= $0AF1; --- как в этом контексте присвоить шестнадцатиричное число.
end
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #35178003
Kirill Razuvaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE PROCEDURE TEST_PROC
AS
DECLARE VARIABLE COUNT_REC INTEGER;
begin
COUNT_REC= $0AF1; --- как в этом контексте присвоить шестнадцатиричное 
число.
end

А сделать
Код: plaintext
COUNT_REC= 2801 ;
- религия не позволяет?

С уважением,
Кирилл Разуваев


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #35178017
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
напиши udf.
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #35178049
pizmon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvнапиши udf.

Внимание, правильный ответ. Дедикейтед то Ivan Prenosil. Работает на всех вариациях IB/FB.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
create procedure HexToInt (avalue varchar( 8 )) returns (result integer)
as
  declare variable mul integer;
  declare variable dig integer;
  declare variable templ varchar( 8 );
begin
  mul =  1 ;
  templ = '';
  result =  0 ;

  while ( 1 = 1 ) do
  begin
    if (avalue like '%' || '0' || templ) then
      dig =  0 ;
    else if (avalue like '%' || '1' || templ) then
      dig =  1 ;
    else if (avalue like '%' || '2' || templ) then
      dig =  2 ;
    else if (avalue like '%' || '3' || templ) then
      dig =  3 ;
    else if (avalue like '%' || '4' || templ) then
      dig =  4 ;
    else if (avalue like '%' || '5' || templ) then
      dig =  5 ;
    else if (avalue like '%' || '6' || templ) then
      dig =  6 ;
    else if (avalue like '%' || '7' || templ) then
      dig =  7 ;
    else if (avalue like '%' || '8' || templ) then
      dig =  8 ;
    else if (avalue like '%' || '9' || templ) then
      dig =  9 ;
    else if (avalue like '%' || 'A' || templ) then
      dig =  10 ;
    else if (avalue like '%' || 'a' || templ) then
      dig =  10 ;
    else if (avalue like '%' || 'B' || templ) then
      dig =  11 ;
    else if (avalue like '%' || 'b' || templ) then
      dig =  11 ;
    else if (avalue like '%' || 'C' || templ) then
      dig =  12 ;
    else if (avalue like '%' || 'c' || templ) then
      dig =  12 ;
    else if (avalue like '%' || 'D' || templ) then
      dig =  13 ;
    else if (avalue like '%' || 'd' || templ) then
      dig =  13 ;
    else if (avalue like '%' || 'E' || templ) then
      dig =  14 ;
    else if (avalue like '%' || 'e' || templ) then
      dig =  14 ;
    else if (avalue like '%' || 'F' || templ) then
      dig =  15 ;
    else if (avalue like '%' || 'f' || templ) then
      dig =  15 ;
    else
      begin
        suspend;
        exit;
      end
      result = result + mul * dig;
      templ = templ || '_';
      mul = mul *  16 ;
  end
end
^

ЗЫ Это шутка, братцы. Нельзя это использовать.
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #35179246
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CougarLНужно просто присвоить число в шестнадцатиричном формате переменной типа integer.
Это нужно для простоты последующего чтения кода.

COUNT_REC= $0AF1; --- как в этом контексте присвоить шестнадцатиричное число.


так подойдет?
Код: plaintext
1.
COUNT_REC=  2801 ; /* $0AF1  */
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #35179326
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #35179426
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladНа последок :
Support hex numeric and string literals
Посмотрел.
Состояние: finished.
Внимание, вопрос: как этим пользоваться ?

------------------------------------------
например,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
EXECUTE BLOCK RETURNS (
  VAL INTEGER
)AS
BEGIN
  VAL = ???  -- Вот что тут надо написать, чтобы присвоить например $F0FFFF
  SUSPEND;
END
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #35179432
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PEAKTOP hvladНа последок :
Support hex numeric and string literals
Посмотрел.
Состояние: finished.
Внимание, вопрос: как этим пользоваться ?

------------------------------------------
например,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
EXECUTE BLOCK RETURNS (
  VAL INTEGER
)AS
BEGIN
  VAL = ???  -- Вот что тут надо написать, чтобы присвоить например $F0FFFF
  SUSPEND;
END
Скачиваем исходники той версии, в которой оно finished, и пробуем :)
Я не проверял, но думаю что 0xF0FFFF должно работать
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #35179440
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скачиваем исходники той версии, в которой оно finished, и пробуем :)
Я не проверял, но думаю что 0xF0FFFF должно работать

Гы-гы. Написано, что fixed 27-02-2008, скачал у Бахвалова сборку 2.5.0.18526, которая собрана на основании сырцов от 27-02-2008. Перепробовано:
Код: plaintext
1.
2.
3.
4.
5.
6.
  VAL = 0xF0FFFF;
  VAL = '0xF0FFFF';
  VAL = $F0FFFF;
  VAL = '$F0FFFF';
  VAL = F0FFFFh;
  VAL = 'F0FFFFh';

Щас вот синхронизировал CVS-ку, попробую свежак собрать :)
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #35179506
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
string literals from VulcanА ведь наверное где-то лежит дока по упомянутому Вулкану ... там, наверное, написано, как надо обозначать хекс-стринг-литералы ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #35179745
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://firebird.cvs.sourceforge.net/firebird/firebird2/src/dsql/parse.y?r1=1.259&r2=1.260Hexadecimal string constant. This is treated the same as a
string constant, but is defined as: X'bbbb'

Where the X is a literal 'x' or 'X' character, followed
by a set of nibble values in single quotes. The nibble
can be 0-9, a-f, or A-F, and is converted from the hex.
If an odd number of nibbles is given, a leading '0' is
assumed.


http://firebird.cvs.sourceforge.net/firebird/firebird2/src/dsql/parse.y?r1=1.259&r2=1.260Hexadecimal numeric constants - 0xBBBBBB

where the '0' and the 'X' (or 'x') are literal, followed
by a set of nibbles, using 0-9, a-f, or A-F. Odd numbers
of nibbles assume a leading '0'. The result is converted
to an integer, and the result returned to the caller. The
token is identified as a NUMBER if it's a 32-bit or less
value, or a NUMBER64INT if it requires a 64-bit number.
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #35179746
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PEAKTOPГы-гы. Написано, что fixed 27-02-2008, скачал у Бахвалова сборку 2.5.0.18526Начиная с билда 18540
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #35179756
Фотография zirra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PEAKTOPГы-гы. Написано, что fixed 27-02-2008, скачал у Бахвалова сборку
2.5.0.18526, которая собрана на основании сырцов от 27-02-2008.
К сожалению, последние дни, во время скачивания и/или компиляции свежего снапшота после полуночи тачка впадает в полный коматоз...
Так что, даже не знаю, когда будет след.билд... :(
Если получится, то завтра на работе запущу под своим присмотром...
---
Vladimir A.Bakhvaloff.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как присвоить шестнадцатиричное число к переменной типа integer?
    #38638103
Тоже пришлось решать сию задачу.
Ну дык, может кому пригодиться. Собственно говоря, для перевода шестнадцатеричного числа в десятичное необходимо его записать в виде многочлена, состоящего из произведений цифр числа и соответствующей степени числа 16, и вычислить по правилам десятичной арифметики:X 16n *16 n-1 +A n-1 *16 n-2 +...A 1 *16 0
Ну и собсно Процедура сводиться к виду
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
create procedure HEXTOINT (
    NUMBCHAR INTEGER,
    VAR CHAR(16))
returns (
    RESULT INTEGER)
as
declare variable I integer;
declare variable LSTR varchar(20);
declare variable J integer;
begin
  RESULT = 0;
  LSTR = '0123456789ABCDEF';
  I = 1;
  while (NUMBCHAR >= I) do
  begin
    select POS
    from POS(SUBSTR(:VAR, :I, :I), :LSTR)
    into J;
    RESULT = RESULT + J * power(16, NUMBCHAR - I);
    I = I + 1;
  end
  suspend;
end


Наверное можно изящнее пробежаться по выделению символа.... Ну уж как получилось, передал тупо длину строки в процедуру.
Процедурка POS возвращает десятичное представление шестнадцатиричного символа.
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #38638125
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начинать с правого символа и последовательно умножать шестнадцать на результат предыдущего умножения (начиная с 16**0) - более эффективно, чем использовать степенные функции.
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #38638186
Ну тогда видимо вместо степени
RESULT = RESULT + J * power(16, NUMBCHAR - I);
нужно так.
if (:numbchar>:I) then
RESULT=(RESULT+J)*16;
else
RESULT=RESULT+j;
И все же начинать с левого символа поскольку он имеет наивысшую степень шестнадцати, а вот правый надо просто прибавить не умножая на 16, поскольку А*16^0=А
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #38638193
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Иногда не помогает и чтение газет" (ц) О.Бендер.
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #38638204
Basil A. Sidorov,
Если это Вы мне, то прошу пояснить.
Имеем шестнадцатиричное число - ABCD
Чтобы преобразовать нам надо
А*16*16*16+ B*16*16+C*16+D*1
После несложных преобразований приходим к
16*(16*(A*16+B)+C)+D
Как изволите видеть А - это правый символ, а вот левый D умножать не надо. Это если без степеней.
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #38638208
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
  
....
while (NUMBCHAR >= I) do
  begin
    select POS
    from POS1(SUBSTR(:VAR, :I, :I), :LSTR)
    into J;
    J = J - 1;
--   RESULT = RESULT + J * power(16, NUMBCHAR - I);
    if (:numbchar>:I) then
    RESULT=(RESULT+J)*16;
    else
    RESULT=RESULT+j;
    I = I + 1;
  end
  suspend;
...



Изменил процедуру, проверил, все работает правильно.
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа integer?
    #38638220
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любитель плоской землиBasil A. Sidorov,
Если это Вы мне, то прошу пояснить.
Имеем шестнадцатиричное число - ABCD
Чтобы преобразовать нам надо
А*16*16*16+ B*16*16+C*16+D*1
После несложных преобразований приходим к
16*(16*(A*16+B)+C)+D
Как изволите видеть А - это правый символ, а вот левый D умножать не надо. Это если без степеней.
Ну да вот только несложные преобразования производить не надо
и получим что-то вроде вот этого
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
....
M=1;
Var10=0;
L=char_length(VAR16);
while ( L>0) 
do begin
   J= position(substring(VAR16 from L for 1),LSTR);
   Var10=Var10+J*M;
   M=M*16;
   L=L-1;
end
...
...
Рейтинг: 0 / 0
Как присвоить шестнадцатиричное число к переменной типа 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
30 сообщений из 30, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как присвоить шестнадцатиричное число к переменной типа integer?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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