|
|
|
HEXtoDEC ???
|
|||
|---|---|---|---|
|
#18+
Доброго Всем времени суток! Проблемы у меня нет никакой, но есть непонятка и любопытство заело. Ситуевина следующая: некая внешняя библиотека (*.dll) при обращении возвращает символьную строку, содержащую хексовый номер вида "89ABCDEF". Его нужно сконвертить в DEC и результат спулить в таблицу в поле которое является ключевым для связи с другой таблицей. Решил использовать вот это: Код: plaintext 1. Код: plaintext 1. Код: plaintext 1. cHexs = -1500573775? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2006, 17:34 |
|
||
|
HEXtoDEC ???
|
|||
|---|---|---|---|
|
#18+
Вообще-то A68F0FB1 = 2794393521 и это верно. Для чисел со знаком "минус" ( а также дробных ) существует обратная двоичная логика. Увидеть алгоритм можно в любом учебнике по дискретной математике. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2006, 23:39 |
|
||
|
HEXtoDEC ???
|
|||
|---|---|---|---|
|
#18+
to hkus авторA68F0FB1 = 2794393521 Верно. Это я скопирил неверное значение из другого места. Но вообще суть от этого не меняется. А вот искать учебник по математике, да еще вспоминать двоичную логику с которой я уж лет 15 не сталкивался, банально времени нету. Я думал, можно с помощью какой нибудь новомодной функции получить минуса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2006, 10:58 |
|
||
|
HEXtoDEC ???
|
|||
|---|---|---|---|
|
#18+
что интересно в хелпах про 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. --- т.е. отрицательные числа типа как низзя ваще трансформить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2006, 14:26 |
|
||
|
HEXtoDEC ???
|
|||
|---|---|---|---|
|
#18+
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 это поле интовое) приводит к ошибке переполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2006, 14:58 |
|
||
|
HEXtoDEC ???
|
|||
|---|---|---|---|
|
#18+
А впрочем вот ведь: Integer Numeric value with no decimals 4 bytes -2147483647 to 2147483647 Так что ничего интересного, это что-то меня сглючило... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2006, 15:21 |
|
||
|
HEXtoDEC ???
|
|||
|---|---|---|---|
|
#18+
Angry Fox...поскольку вот это: Код: plaintext 1. Код: plaintext 1. cHexs = -1500573775? неодинаковый результат-то в первом случае это A68E6FB1, а во втором - это A68 F0 FB1 Далее, если взять обычный виндовый калькуятор в инженерном виде, то A68E6FB1 внатуре вернет 2794352561 а вот A68 F0 FB1 вернет уже 2794393521 все от того, что низзя TRANSFORM(-1500573775, '@0'),3,16), а соотвецтвенно низзя и в этом случае Angry Foxиз 'A68F0FB1' без особого гемора получить cHexs = -1500573775? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2006, 15:31 |
|
||
|
HEXtoDEC ???
|
|||
|---|---|---|---|
|
#18+
CTAC-KOнеодинаковый результат-то из 'A68F0FB1' без особого гемора получить cHexs = -1500573775?[/quot] Я уже написАл что это очепятка т.к. не то значение скопирил. 2794393521 = "A68F0FB1" -1500573775 = "A68F0FB1" TRANSFORM(-1500573775, '@0'),3,16) действительно нельзя. Ошибку синтаксиса получишь. SUBSTR(TRANSFORM(-1500573775, '@0'),3,16) вернет "A68F0FB1" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2006, 15:52 |
|
||
|
HEXtoDEC ???
|
|||
|---|---|---|---|
|
#18+
Angry Foxне то значение скопирил. 2794393521 = "A68F0FB1" -1500573775 = "A68F0FB1" TRANSFORM(-1500573775, '@0'),3,16) действительно нельзя. Ошибку синтаксиса получишь. SUBSTR(TRANSFORM(-1500573775, '@0'),3,16) вернет "A68F0FB1" та же хрень что и у тебя - скопировал строку с лишним куском :) Суть дела это не меняет, т.е. поскольку низзя трансформа кормить отрицательными числами, то SUBSTR(TRANSFORM(-1500573775, '@0'),3) дает непонятно что за число вообще, а по сути должно бы было давать егора. И уж тем более из этого результата обратный непросто (если вообще возможно) заполучить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2006, 16:21 |
|
||
|
HEXtoDEC ???
|
|||
|---|---|---|---|
|
#18+
CTAC-KO Суть дела это не меняет, т.е. поскольку низзя трансформа кормить отрицательными числами, то SUBSTR(TRANSFORM(-1500573775, '@0'),3) дает непонятно что за число вообще... Так в том то и дело что возвращает честное хексовое число. Я уж и алгоритм накропал, и индексы построил и реляционные отношения создал и все на этом выражении. Пока работает. А что нельзя без утомительных телодвижений обратный результат получить, ну на нет и суда нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2006, 16:37 |
|
||
|
HEXtoDEC ???
|
|||
|---|---|---|---|
|
#18+
Долго не мудря, засунул на С++ в scanf(...) и скомпилил библу с 1 функцией- работает в 4 строки+2 на скобки :)), { Value Val={0}; ZeroMemory(&Val, sizeof(Value)); int iErrCode= _Load(&Loc, &Val); scanf(..); } делает любое! из любого в соотвествии с выбранным форматом параметра. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2006, 02:20 |
|
||
|
HEXtoDEC ???
|
|||
|---|---|---|---|
|
#18+
hkus, нету у меня С++ и вообще ничего кроме FOXа. Но все равно спасибо за информацию. Бог даст разгребу тут одно болото, может на досуге и поэксперементирую :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2006, 12:29 |
|
||
|
HEXtoDEC ???
|
|||
|---|---|---|---|
|
#18+
Angry Fox CTAC-KO Суть дела это не меняет, т.е. поскольку низзя трансформа кормить отрицательными числами, то SUBSTR(TRANSFORM(-1500573775, '@0'),3) дает непонятно что за число вообще... Так в том то и дело что возвращает честное хексовое число. Да с чего Вы взяли что оно честное-то? Я же писал тут уже: хекс для 2794393521 - A68E6FB1, а для -1500573775 - A68F0FB1 Далее, если взять обычный виндовый калькуятор в инженерном виде, то A68E6FB1 внатуре вернет 2794352561, а вот A68F0FB1 вернет уже 2794393521, Однако по-идее верно и обратное, т.е. переведите таким же способом число 2794393521 в хекс, что получите? Правильно, то же самое что и для -1500573775. => Т.е. хекс в такос случае для чисел -1500573775 и 2794393521 - одинаков!!! =>т.е. НЕУНИКАЛЕН!!! => Т.е. если Вы так плотно повесили прогу на эту фичу - проблемы всплывут и весьма скоро!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2006, 14:08 |
|
||
|
HEXtoDEC ???
|
|||
|---|---|---|---|
|
#18+
CTAC-KO Да с чего Вы взяли что оно честное-то? Да вот из этого и взял :) CTAC-KOхекс в такос случае для чисел -1500573775 и 2794393521 - одинаков!!! Это как раз то что и требовалось и меня вполне устраивает т.к. для вполне определенного поля, указанные числа в данной конкретной ситуации являются по сути эквивалентом, а раз я это знаю то и обработать сумею. Что же до этого: CTAC-KO если Вы так плотно повесили прогу на эту фичу - проблемы всплывут и весьма скоро!!! то проблемы всплывут не у меня, а у заказчика. Я их сразу предупредил что у них логические дыры в самой БД, а трогать ХР и структуру мне не разрешили :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 11:16 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34044381&tid=1590601]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
25ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 345ms |

| 0 / 0 |
