Germany | Finland | Saint Petersburg | Drive

Hex: чтение 16-ричных чисел

Шестнадцатеричное цифры: преобразование из строки в  число (QPILE не умеет). Привожу текст, полученный после препроцессора (то есть готовый к исполнению). Распознаются натуральные числа.

 

func Int_Base(Str)
   if substr(Str,0,2) == "0x"
      Str = substr(Str,2,len(Str)-2)
   end if
   result = 0
   for __2 from 0 to len(Str)-1
      __1 = find("0123456789ABCDEF",0,substr(Str,__2,1))
      if __1 == -1
         Break
      End if
      result = result * 16 + __1
   end for END FUNC

Проверим:

a = Hex("0xFF")
a1 = Hex("FF")
a2 = Hex("10")
a3 = Hex("0xFF0011")
message(a & " " & a1 & " " &a2 & " " &a3,1)

Получим:

255   255   16   16711697 

Потребовалось для возможности задания пользователем разных цветовых схем в роботе.


Лёгкая модификация позволит читать числа в любой системе счисления. Вот вариант, который умеет читать натуральные числа в двоичной (0b10011), восьмеричной(0777), десятичной (1234) и шестнадцатеричной (0xFF00AA) системах. Написано с использованием М4.

 

Func Int_Base(Str)
   Local(Symbol,Base,Symbols_List)

   result = Str_Left(Str)
   if result != "0"
      Return(Float(Str))
   end if

   result = Chr_Upper(substr(Str,1,1))
   Switch(result)
      Case("X")
         Base = 16
         Str = Str_Right(Str,2)
      Case("B")
         Base = 2
         Str = Str_Right(Str,2)
      Default
         Base = 8
         Str = Str_Right(Str,1)
   EndSwitch result = 0
Symbols_List = Str_Left("0123456789ABCDEF",Base)   ForString(i,Str)
      Symbol = find(Symbols_List,0,Chr_Upprer(substr(Str,i,1)))
      if Symbol == Unknown
         Break
      End if
      result = result * Base + Symbol
   end for
EndFunc(Result)


Здесь нет никаких вызовов других пользовательских функций, только макросы, которые будут развёрнуты inline. При отсутствии препроцессора эти макросы необходимо заменить на допустимые конструкции qpile вручную.

 


Мастер-класс от гитариста Deep Purple по скоростной работе пальцами для скальперов (декабрь 1971):

Добавить комментарий


Майнинг в браузере