Страница 1 из 1

Формат Int64 в домашних условиях

Добавлено: 28 Сентябрь 2023, 7:43
Игорь Столяров
Привет всем !

Правильно ли я понимаю, что для приёма данных при парсинге полей
в формате Int64 у нас сейчас нет других вариантов, кроме:

Код: Выделить всё

V1 Decimal(19)
V2 CString(20)  ! Как-то уже совсем тупо :(
V3 Ждать Clarion 12 

?

Формат Int64 в домашних условиях

Добавлено: 28 Сентябрь 2023, 11:27
ingasoftplus
посмотрите на зачатки в equates.clw

Код: Выделить всё

! 64 bits integers

  OMIT('***',_BUILTIN_I64_)
INT64    GROUP,TYPE
lo         ULONG
hi         LONG
         END

UINT64   GROUP,TYPE
lo         ULONG
hi         ULONG
         END
! ***
и в i64.INC

это уже есть в clarion 10 и 11.1 (по крайней мере)

Формат Int64 в домашних условиях

Добавлено: 28 Сентябрь 2023, 12:02
Игорь Столяров
Я видел эти зачатки, но что-то мне подсказывает, что тут другая история (для передачи параметров в сторонние DLL).
А вот такое присвоение точно не прокатит - т.к. транслятор будет считать такой Group() 8-ми байтовой строкой:

Код: Выделить всё

MyBigInt Group(INT64).

  Code
  MyBigInt = 123456789012345
  Message(MyBigInt)

Формат Int64 в домашних условиях

Добавлено: 28 Сентябрь 2023, 15:27
Дед Пахом
Есть же libsrc\win\i64.INC.

Формат Int64 в домашних условиях

Добавлено: 28 Сентябрь 2023, 15:42
Игорь Столяров
Дед Пахом писал(а): 28 Сентябрь 2023, 15:27 Есть же libsrc\win\i64.INC.
Это набор функций для обмена и операций в формате Int64 ... а мне нужно хранение больших чисел. :(
Я уже увидел, что обмен в Int64 идёт через DECIMAL ... но DECIMAL не подходит для ключей в Pervasive.SQL. :(

Поэтому, видимо, остаётся только CSTRING, тем более что упорядочивание по Int64 мне не нужно.
(или можно записывать строки в формате "@N-020")

Формат Int64 в домашних условиях

Добавлено: 04 Октябрь 2023, 7:22
Игорь Столяров
Вообще, конечно, чудны творения рук детей твоих Господи ... ;)
Если верить справке Clarion 11.1, то получается, что значения по типам переменных:

Код: Выделить всё

Long:  -2,147,483,648 to 2,147,483,647
ULong:              0 to 4,294,967,295  ! <- OK !

Но !

Int64: -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
UInt64:                         0 to 9,223,372,036,854,775,807  ! <- Why ?!
Здесь уже логика вышла из чата ... :)

Формат Int64 в домашних условиях

Добавлено: 04 Октябрь 2023, 15:51
kreator
Скорее всего описались - https://learn.microsoft.com/ru-ru/cpp/c ... om=vs-2019.

Формат Int64 в домашних условиях

Добавлено: 04 Октябрь 2023, 21:11
Игорь Столяров
kreator писал(а): 04 Октябрь 2023, 15:51 Скорее всего описались
Зная как работает SV - могли и обкакаться ... ;)
В Clarion'e ведь реализован не нативный INT64, а притянутый за ухи костыль-спарка из двух LONG ... :(
Ждём C12, а пока юзаем вместо INT64 традиционный DECIMAL(20) - в принципе всё работает. :)

Формат Int64 в домашних условиях

Добавлено: 05 Октябрь 2023, 15:09
kreator
Игорь Столяров писал(а): 04 Октябрь 2023, 21:11 Ждём C12, а пока юзаем вместо INT64 традиционный DECIMAL(20) - в принципе всё работает.
Тогда уж C2024.

Формат Int64 в домашних условиях

Добавлено: 05 Октябрь 2023, 15:18
Игорь Столяров
kreator писал(а): 05 Октябрь 2023, 15:09 Тогда уж C2024.
Возможно. Здесь важно, что бы INT64 был полноценным форматом - в т.ч. поддерживался драйверами БД ...