Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как присвоить шестнадцатиричное число к переменной типа integer? / 25 сообщений из 30, страница 1 из 2
07.03.2008, 11:50:38
    #35177894
CougarL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как присвоить шестнадцатиричное число к переменной типа integer?
Как присвоить число в шестнадцатиричном формате к переменной типа integer?
Функции преобразования не нашел.
...
Рейтинг: 0 / 0
07.03.2008, 11:54:06
    #35177908
Di_LIne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как присвоить шестнадцатиричное число к переменной типа integer?
CougarLКак присвоить число в шестнадцатиричном формате к переменной типа integer? Ни-иапонил, на фига...
Или десятичный или НЕХ-код. Храни в стринге.

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


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


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

Мне это необходимо сделать в теле хранимой процедуры.
CREATE PROCEDURE TEST_PROC
AS
DECLARE VARIABLE COUNT_REC INTEGER;
begin
COUNT_REC= $0AF1; --- как в этом контексте присвоить шестнадцатиричное число.
end
...
Рейтинг: 0 / 0
07.03.2008, 12:23:46
    #35178003
Kirill Razuvaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как присвоить шестнадцатиричное число к переменной типа integer?
Добрый день!
Код: 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
07.03.2008, 12:28:08
    #35178017
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как присвоить шестнадцатиричное число к переменной типа integer?
напиши udf.
...
Рейтинг: 0 / 0
07.03.2008, 12:37:01
    #35178049
pizmon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как присвоить шестнадцатиричное число к переменной типа integer?
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
07.03.2008, 23:26:53
    #35179246
S.G.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как присвоить шестнадцатиричное число к переменной типа integer?
CougarLНужно просто присвоить число в шестнадцатиричном формате переменной типа integer.
Это нужно для простоты последующего чтения кода.

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


так подойдет?
Код: plaintext
1.
COUNT_REC=  2801 ; /* $0AF1  */
...
Рейтинг: 0 / 0
08.03.2008, 00:36:25
    #35179326
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как присвоить шестнадцатиричное число к переменной типа integer?
...
Рейтинг: 0 / 0
08.03.2008, 11:23:32
    #35179426
PEAKTOP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как присвоить шестнадцатиричное число к переменной типа integer?
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
08.03.2008, 11:38:42
    #35179432
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как присвоить шестнадцатиричное число к переменной типа integer?
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
08.03.2008, 11:58:36
    #35179440
PEAKTOP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как присвоить шестнадцатиричное число к переменной типа integer?
Скачиваем исходники той версии, в которой оно 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
08.03.2008, 15:06:08
    #35179506
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как присвоить шестнадцатиричное число к переменной типа integer?
string literals from VulcanА ведь наверное где-то лежит дока по упомянутому Вулкану ... там, наверное, написано, как надо обозначать хекс-стринг-литералы ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
08.03.2008, 22:41:52
    #35179745
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как присвоить шестнадцатиричное число к переменной типа integer?
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
08.03.2008, 22:45:05
    #35179746
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как присвоить шестнадцатиричное число к переменной типа integer?
PEAKTOPГы-гы. Написано, что fixed 27-02-2008, скачал у Бахвалова сборку 2.5.0.18526Начиная с билда 18540
...
Рейтинг: 0 / 0
08.03.2008, 22:59:56
    #35179756
zirra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как присвоить шестнадцатиричное число к переменной типа integer?
PEAKTOPГы-гы. Написано, что fixed 27-02-2008, скачал у Бахвалова сборку
2.5.0.18526, которая собрана на основании сырцов от 27-02-2008.
К сожалению, последние дни, во время скачивания и/или компиляции свежего снапшота после полуночи тачка впадает в полный коматоз...
Так что, даже не знаю, когда будет след.билд... :(
Если получится, то завтра на работе запущу под своим присмотром...
---
Vladimir A.Bakhvaloff.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
11.05.2014, 20:19:33
    #38638103
Как присвоить шестнадцатиричное число к переменной типа integer?
Тоже пришлось решать сию задачу.
Ну дык, может кому пригодиться. Собственно говоря, для перевода шестнадцатеричного числа в десятичное необходимо его записать в виде многочлена, состоящего из произведений цифр числа и соответствующей степени числа 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
11.05.2014, 20:55:25
    #38638125
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как присвоить шестнадцатиричное число к переменной типа integer?
Начинать с правого символа и последовательно умножать шестнадцать на результат предыдущего умножения (начиная с 16**0) - более эффективно, чем использовать степенные функции.
...
Рейтинг: 0 / 0
11.05.2014, 23:01:08
    #38638186
Как присвоить шестнадцатиричное число к переменной типа integer?
Ну тогда видимо вместо степени
RESULT = RESULT + J * power(16, NUMBCHAR - I);
нужно так.
if (:numbchar>:I) then
RESULT=(RESULT+J)*16;
else
RESULT=RESULT+j;
И все же начинать с левого символа поскольку он имеет наивысшую степень шестнадцати, а вот правый надо просто прибавить не умножая на 16, поскольку А*16^0=А
...
Рейтинг: 0 / 0
11.05.2014, 23:26:28
    #38638193
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как присвоить шестнадцатиричное число к переменной типа integer?
"Иногда не помогает и чтение газет" (ц) О.Бендер.
...
Рейтинг: 0 / 0
11.05.2014, 23:49:50
    #38638204
Как присвоить шестнадцатиричное число к переменной типа integer?
Basil A. Sidorov,
Если это Вы мне, то прошу пояснить.
Имеем шестнадцатиричное число - ABCD
Чтобы преобразовать нам надо
А*16*16*16+ B*16*16+C*16+D*1
После несложных преобразований приходим к
16*(16*(A*16+B)+C)+D
Как изволите видеть А - это правый символ, а вот левый D умножать не надо. Это если без степеней.
...
Рейтинг: 0 / 0
11.05.2014, 23:52:42
    #38638208
Как присвоить шестнадцатиричное число к переменной типа integer?
Код: 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
12.05.2014, 00:20:02
    #38638220
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как присвоить шестнадцатиричное число к переменной типа integer?
Любитель плоской земли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
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как присвоить шестнадцатиричное число к переменной типа integer? / 25 сообщений из 30, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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