Автор Тема: Баг с Hex()  (Прочитано 3275 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Sαuron [?]

  • Новичок
  • *
  • Сообщений: 46
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Баг с Hex()
« Создано: Февраль 22, 2017, 15:21:09 »
Hex() возвращает некорректное число, если скормить ему целое, которое было получено в результате взаимодействия дробных чисел,
пример бага:
Код: AutoIt [Выделить]
$byte_pos = 2
MsgBox('', '', Hex($byte_pos, 16)) ; 00 00 00 00 00 00 00 02
$byte_pos = 1.5 + 0.5
MsgBox('', '', Hex($byte_pos, 16)) ; 40 00 00 00 00 00 00 00
$byte_pos = 2.5 - 0.5
MsgBox('', '', Hex($byte_pos, 16)) ; 40 00 00 00 00 00 00 00
$byte_pos = 4 ^ 0.5
MsgBox('', '', Hex($byte_pos, 16)) ; 40 00 00 00 00 00 00 00
$byte_pos = 4 * 0.5
MsgBox('', '', Hex($byte_pos, 16)) ; 40 00 00 00 00 00 00 00
$byte_pos = 4 / 2
MsgBox('', '', Hex($byte_pos, 16)) ; 40 00 00 00 00 00 00 00
$byte_pos = 4 / 2 + 0
MsgBox('', '', Hex($byte_pos, 16)) ; 40 00 00 00 00 00 00 00
 

P.S. Этот баг выводил меня весь день, код работал с памятью и очень трудно было отладить его, даже не думал, что такая простая функция может работать неправильно :\

Русское сообщество AutoIt

Баг с Hex()
« Отправлен: Февраль 22, 2017, 15:21:09 »

Оффлайн Dima1337 [?]

  • Новичок
  • *
  • Сообщений: 141
  • Репутация: 14
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Баг с Hex()
« Ответ #1, Отправлен: Февраль 22, 2017, 15:28:08 »
Он плохо себя ведет только с дробными числами
Код: AutoIt [Выделить]
$byte_pos = 2
MsgBox('', '', Hex($byte_pos, 16)) ; 00 00 00 00 00 00 00 02

$byte_pos = int(1.5 + 0.5)
MsgBox('', '', Hex($byte_pos, 16)) ; 00 00 00 00 00 00 00 02

$byte_pos = 2.0
MsgBox('', '', Hex($byte_pos, 16)) ; 40 00 00 00 00 00 00 00
 

А все потому что: Преобразует десятичное ЦЕЛОЕ число или бинарные данные в шестнадцатеричный вид.

Правильный вопрос - полдела!

Оффлайн Sαuron [?]

  • Новичок
  • *
  • Сообщений: 46

  • Автор темы
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Баг с Hex()
« Ответ #2, Отправлен: Февраль 22, 2017, 17:56:02 »
Это понятно, что если принудительно сделать его int, то проблемы не будет, но непонятно, почему нетипизированный ЯП с одним лишь типом Variant хранит числа 2.0 и 2 по разному, если они одного типа, при этом функции MsgBox(), ConsoleWrite() и даже String() выводят строго 2 и не поймешь, что там на самом деле float число 2.0, пока не заглянешь в память через CE

Оффлайн Dima1337 [?]

  • Новичок
  • *
  • Сообщений: 141
  • Репутация: 14
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Баг с Hex()
« Ответ #3, Отправлен: Февраль 22, 2017, 18:18:16 »
Это не баг:
Код: AutoIt [Выделить]
MsgBox('', '',VarGetType(2.1 + 1.9))
 

Цитировать
почему нетипизированный ЯП с одним лишь типом Variant хранит числа 2.0 и 2 по разному, если они одного типа
я рекомендую ознакомится со справкой: https://autoit-script.ru/autoit3_docs/intro/lang_datatypes.htm
« Последнее редактирование: Февраль 22, 2017, 18:46:11 от Dima1337 »

Русское сообщество AutoIt

Re: Баг с Hex()
« Ответ #3 Отправлен: Февраль 22, 2017, 18:18:16 »

Оффлайн Alofa [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1108
  • Репутация: 155
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Баг с Hex()
« Ответ #4, Отправлен: Февраль 23, 2017, 00:53:16 »
... если они одного типа...
Заблуждаетесь. В дополнении к ссылке от Dima1337 добавлю Еще.
« Последнее редактирование: Февраль 23, 2017, 02:34:07 от Alofa »

Русское сообщество AutoIt

Re: Баг с Hex()
« Ответ #4 Отправлен: Февраль 23, 2017, 00:53:16 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
4 Ответов
5043 Просмотров
Последний ответ Октябрь 25, 2009, 09:48:28
от snoitaleR
11 Ответов
6502 Просмотров
Последний ответ Ноябрь 06, 2009, 12:35:10
от amel27
6 Ответов
3879 Просмотров
Последний ответ Август 14, 2011, 00:27:49
от madmasles
4 Ответов
3891 Просмотров
Последний ответ Декабрь 17, 2011, 14:56:59
от Alexander
7 Ответов
5562 Просмотров
Последний ответ Ноябрь 23, 2012, 16:09:20
от Medic84
6 Ответов
4718 Просмотров
Последний ответ Март 23, 2013, 11:30:48
от dimid
5 Ответов
2427 Просмотров
Последний ответ Июль 22, 2013, 15:51:59
от MnM
7 Ответов
2551 Просмотров
Последний ответ Март 19, 2014, 20:02:34
от vaf
6 Ответов
7070 Просмотров
Последний ответ Июнь 19, 2015, 20:44:51
от Gen345
4 Ответов
8018 Просмотров
Последний ответ Октябрь 02, 2015, 00:43:21
от DANioR