УкраїнськаEnglishmRussian
Вхід/Новий
У темі немає нових постів

Преобразование большого числа в 16ричную систему


Автор Повідомлення
Повідомлення створено: 22. 10. 2013 [14:05]
Godzilla
Арсен Закоян
Contributor
Автор теми
Зареєстрован(а) с: 12.02.2013
Повідомлення: 123
Пытаюсь преобразовать число 4194304011 в 16ричную систему.
"netaddr" вещественное число,так как потолок целого 2147483647.Следующим способом преобразовываю
netaddr1 =io.attr("netaddr").toInt(10).toString(16); выводит 7FFFFFFF,что упирается в потолок целого числа.Как можно преобразовать в этой ситуации?Должно получится FA00000B.Заранее спасибо.
Повідомлення створено: 22. 10. 2013 [17:47]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3742
"Godzilla" wrote:

Пытаюсь преобразовать число 4194304011 в 16ричную систему.
"netaddr" вещественное число,так как потолок целого 2147483647.Следующим способом преобразовываю
netaddr1 =io.attr("netaddr").toInt(10).toString(16); выводит 7FFFFFFF,что упирается в потолок целого числа.Как можно преобразовать в этой ситуации?

Поскольку значение целых в OpenSCADA это 32-разрядное знаковое то просто не получится.
А непросто это выделять из вещественного части кратные скажем 2^28 преобразовывать их и добавлять в строку, например, так:
JAVASCRIPT
netaddr = 4194304011.0;
first = floor(netaddr/pow(2,28));
second = (netaddr/pow(2,28)-first)*pow(2,28);
rez = first.toString(16)+second.toString(16);


Learn, learn and learn better than work, work and work.



10240