powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / HEXtoDEC ???
14 сообщений из 14, страница 1 из 1
HEXtoDEC ???
    #34035653
Angry Fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго Всем времени суток!
Проблемы у меня нет никакой, но есть непонятка и любопытство заело. Ситуевина следующая: некая внешняя библиотека (*.dll) при обращении возвращает символьную строку, содержащую хексовый номер вида "89ABCDEF". Его нужно сконвертить в DEC и результат спулить в таблицу в поле которое является ключевым для связи с другой таблицей. Решил использовать вот это:
Код: plaintext
1.
cDigits = 'A68F0FB1'
ctmp = EVALUATE("0x" + ALLTRIM(cDigits)) && ctmp =  2794393521 
...но оказалось что для значения 'A68F0FB1' в другой таблице десятичный эквивалент равен -1500573775. Вогнал это значение в калькулятор, получил 'FFFFFFFFA68F0FB1' т.е. восемь байт вместо четырех. Зачем это делали, понятия не имею. Но поскольку вот это:
Код: plaintext
1.
cHexs =  2794352561 
cHex=SUBSTR(TRANSFORM(cHexs, '@0'), 3 , 8 ) && cHex=A68E6FB1
и это
Код: plaintext
1.
cHexs = - 1500573775 
cHex=SUBSTR(TRANSFORM(cHexs, '@0'), 3 , 16 ) && cHex=A68E6FB1
дает одинаковый результат проблемы нет никакой. Только вот интересно, можно ли средствами FOXа из 'A68F0FB1' без особого гемора получить
cHexs = -1500573775?
...
Рейтинг: 0 / 0
HEXtoDEC ???
    #34036226
hkus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то A68F0FB1 = 2794393521 и это верно. Для чисел со знаком "минус" ( а также дробных ) существует обратная двоичная логика. Увидеть алгоритм можно в любом учебнике по дискретной математике.
Удачи.
...
Рейтинг: 0 / 0
HEXtoDEC ???
    #34036852
Angry Fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to hkus
авторA68F0FB1 = 2794393521
Верно. Это я скопирил неверное значение из другого места. Но вообще суть от этого не меняется.
А вот искать учебник по математике, да еще вспоминать двоичную логику с которой я уж лет 15 не сталкивался, банально времени нету. Я думал, можно с помощью какой нибудь новомодной функции получить минуса.
...
Рейтинг: 0 / 0
HEXtoDEC ???
    #34037791
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что интересно в хелпах про TRANSFORM написано
---
@0
Converts numeric or currency values to their hexadecimal equivalents. The numeric or currency value must be positive and less than 4,294,967,296.
---

т.е. отрицательные числа типа как низзя ваще трансформить
...
Рейтинг: 0 / 0
HEXtoDEC ???
    #34037981
Angry Fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CTAC-KOConverts numeric or currency values to their hexadecimal equivalents. The numeric or currency value must be positive and less than 4,294,967,296.

А вот еще интереснее.
Попытка вставить значение 2,794,393,521 в поле курсора полученного от SQL сервера (на SQL это поле интовое) приводит к ошибке переполнения.
...
Рейтинг: 0 / 0
HEXtoDEC ???
    #34038083
Angry Fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А впрочем вот ведь:
Integer Numeric value with no decimals 4 bytes -2147483647 to 2147483647
Так что ничего интересного, это что-то меня сглючило...
...
Рейтинг: 0 / 0
HEXtoDEC ???
    #34038127
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Angry Fox...поскольку вот это:
Код: plaintext
1.
cHexs =  2794352561 
cHex=SUBSTR(TRANSFORM(cHexs, '@0'), 3 , 8 ) && cHex=A68E6FB1
и это
Код: plaintext
1.
cHexs = - 1500573775 
cHex=SUBSTR(TRANSFORM(cHexs, '@0'), 3 , 16 ) && cHex=A68E6FB1
дает одинаковый результат проблемы нет никакой. Только вот интересно, можно ли средствами FOXа из 'A68F0FB1' без особого гемора получить
cHexs = -1500573775?
неодинаковый результат-то
в первом случае это A68E6FB1, а во втором - это A68 F0 FB1
Далее, если взять обычный виндовый калькуятор в инженерном виде, то
A68E6FB1 внатуре вернет 2794352561
а вот A68 F0 FB1 вернет уже 2794393521

все от того, что низзя TRANSFORM(-1500573775, '@0'),3,16), а соотвецтвенно низзя и в этом случае
Angry Foxиз 'A68F0FB1' без особого гемора получить
cHexs = -1500573775?
...
Рейтинг: 0 / 0
HEXtoDEC ???
    #34038204
Angry Fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CTAC-KOнеодинаковый результат-то
из 'A68F0FB1' без особого гемора получить
cHexs = -1500573775?[/quot]
Я уже написАл что это очепятка т.к. не то значение скопирил.

2794393521 = "A68F0FB1"
-1500573775 = "A68F0FB1"

TRANSFORM(-1500573775, '@0'),3,16) действительно нельзя. Ошибку синтаксиса получишь.
SUBSTR(TRANSFORM(-1500573775, '@0'),3,16) вернет "A68F0FB1"
...
Рейтинг: 0 / 0
HEXtoDEC ???
    #34038341
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Angry Foxне то значение скопирил.

2794393521 = "A68F0FB1"
-1500573775 = "A68F0FB1"

TRANSFORM(-1500573775, '@0'),3,16) действительно нельзя. Ошибку синтаксиса получишь.
SUBSTR(TRANSFORM(-1500573775, '@0'),3,16) вернет "A68F0FB1"
та же хрень что и у тебя - скопировал строку с лишним куском :) Суть дела это не меняет, т.е. поскольку низзя трансформа кормить отрицательными числами, то SUBSTR(TRANSFORM(-1500573775, '@0'),3) дает непонятно что за число вообще, а по сути должно бы было давать егора. И уж тем более из этого результата обратный непросто (если вообще возможно) заполучить.
...
Рейтинг: 0 / 0
HEXtoDEC ???
    #34038411
Angry Fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CTAC-KO
Суть дела это не меняет, т.е. поскольку низзя трансформа кормить отрицательными числами, то SUBSTR(TRANSFORM(-1500573775, '@0'),3) дает непонятно что за число вообще...
Так в том то и дело что возвращает честное хексовое число. Я уж и алгоритм накропал, и индексы построил и реляционные отношения создал и все на этом выражении. Пока работает. А что нельзя без утомительных телодвижений обратный результат получить, ну на нет и суда нет.
...
Рейтинг: 0 / 0
HEXtoDEC ???
    #34043087
hkus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Долго не мудря, засунул на С++ в scanf(...) и скомпилил библу с 1 функцией- работает в 4 строки+2 на скобки :)),
{
Value Val={0};
ZeroMemory(&Val, sizeof(Value));
int iErrCode= _Load(&Loc, &Val);
scanf(..);
}
делает любое! из любого в соотвествии с выбранным форматом параметра.
Удачи.
...
Рейтинг: 0 / 0
HEXtoDEC ???
    #34043950
Angry Fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hkus, нету у меня С++ и вообще ничего кроме FOXа. Но все равно спасибо за информацию. Бог даст разгребу тут одно болото, может на досуге и поэксперементирую :)
...
Рейтинг: 0 / 0
HEXtoDEC ???
    #34044381
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Angry Fox CTAC-KO
Суть дела это не меняет, т.е. поскольку низзя трансформа кормить отрицательными числами, то SUBSTR(TRANSFORM(-1500573775, '@0'),3) дает непонятно что за число вообще...
Так в том то и дело что возвращает честное хексовое число.
Да с чего Вы взяли что оно честное-то? Я же писал тут уже:

хекс для 2794393521 - A68E6FB1,
а для -1500573775 - A68F0FB1
Далее, если взять обычный виндовый калькуятор в инженерном виде, то
A68E6FB1 внатуре вернет 2794352561,
а вот A68F0FB1 вернет уже 2794393521,
Однако по-идее верно и обратное, т.е. переведите таким же способом число 2794393521 в хекс, что получите? Правильно, то же самое что и для -1500573775. => Т.е. хекс в такос случае для чисел -1500573775 и 2794393521 - одинаков!!! =>т.е. НЕУНИКАЛЕН!!! => Т.е. если Вы так плотно повесили прогу на эту фичу - проблемы всплывут и весьма скоро!!!
...
Рейтинг: 0 / 0
HEXtoDEC ???
    #34046487
Angry Fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CTAC-KO Да с чего Вы взяли что оно честное-то?
Да вот из этого и взял :)
CTAC-KOхекс в такос случае для чисел -1500573775 и 2794393521 - одинаков!!!
Это как раз то что и требовалось и меня вполне устраивает т.к. для вполне определенного поля, указанные числа в данной конкретной ситуации являются по сути эквивалентом, а раз я это знаю то и обработать сумею.
Что же до этого:
CTAC-KO если Вы так плотно повесили прогу на эту фичу - проблемы всплывут и весьма скоро!!!
то проблемы всплывут не у меня, а у заказчика. Я их сразу предупредил что у них логические дыры в самой БД, а трогать ХР и структуру мне не разрешили :)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / HEXtoDEC ???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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