Кто-нибудь может определить язык программирования этого фрагмента кода? - PullRequest
3 голосов
/ 01 марта 2020

Я пытался создать приложение Android для управления различными приборами с помощью ИК-бластера на моем телефоне. В качестве отправной точки я хотел получить импульсы, используемые другим приложением, а именно приложением Xiaomi «Mi Remote».

Я установил приложение и скопировал данные приложения из каталога /data в Android. Мне удалось найти базу данных SQLite, содержащую информацию о частоте и импульсе для моего устройства. Он был сохранен как фрагмент кода, как показано ниже. Кто-нибудь может определить, какой это язык?

if(exts~=nil) then
timing_on=exts[9] 
timing_off=exts[10] 
bytes1={}  
for i=1,9,1 do bytes1[i]=bytes[i] bytes1[i+9]=bytes[i] end 
bytes1[13]=0x60 
if(((timing_on==0)or(timing_on==nil))and((timing_off==0) or(timing_off==nil)))then return  end
if(timing_on~=nil)and(timing_on>0) then
if(timing_on<600) then 
    if(timing_on%60==0) then 
        bytes1[2]=(bytes1[2]&0x0F)+0x80 
        else bytes1[2]=(bytes1[2]&0x0F)+0x90 
            end 
elseif(timing_on>=600)and(timing_on<1200) then 
    if(timing_on%60==0) then
        bytes1[2]=(bytes[2]&0x0F)+0xA0 
        else bytes1[2]=(bytes1[2]&0x0F)+0xB0  
            end
elseif(timing_on>=1200) then 
    if(timing_on%60==0) then 
        bytes[2]=(bytes1[2]&0x0F)+0xC0  
        else bytes1[2]=(bytes1[2]&0x0F)+0xD0 
            end 
end
bytes1[3]=bytes1[3]+math.floor((timing_on\/60)%10) 
bytes1[9]=(((bytes1[1]&0x0F)+(bytes1[2]&0x0F)+(bytes1[3]&0x0F)+(bytes1[4]&0x0F)+(bytes1[6]>>4)+0x0C)<<4) 
bytes1[11]=bytes1[2] 
bytes1[12]=bytes1[3] 
bytes1[15]=(timing_on&0xFF) 
bytes1[16]=((timing_on>>8)&0x0F) 
bytes1[17]=0 
bytes1[18]=(((bytes1[9]>>4)+(bytes1[15]>>4)+(bytes1[16]>>4)+(bytes1[17]>>4)+0x0D)<<4)+0x02 
elseif(timing_off~=nil)and(timing_off>0)then
    if(timing_off<600) then 
        if(timing_off%60==0) then 
            bytes1[2]=(bytes1[2]&0x0F)+0x80  
            else 
            bytes1[2]=(bytes1[2]&0x0F)+0x90 
            end 
    elseif(timing_off>=600)and(timing_off<1200) then 
        if(timing_off%60==0) then 
            bytes1[2]=(bytes1[2]&0x0F)+0xA0  
            else bytes1[2]=(bytes1[2]&0x0F)+0xB0 
                end 
    elseif(timing_off)>=1200 then 
        if(timing_off%60==0) then 
            bytes1[2]=(bytes1[2]&0x0F)+0xC0 
            else bytes1[2]=(bytes1[2]&0x0F)+0xD0 
                end 
    end
    bytes1[3]=bytes1[3]+math.floor((timing_off\/60)%10) 
    bytes1[9]=(((bytes1[1]&0x0F)+(bytes1[2]&0x0F)+(bytes1[3]&0x0F)+(bytes1[4]&0x0F)+(bytes1[6]>>4)+0x0C)<<4) 
    bytes1[11]=bytes1[2] 
    bytes1[12]=bytes1[3] 
    bytes1[16]=((timing_off&0x0F)<<4) 
    bytes1[17]=(timing_off>>4) 
    bytes1[15]=0 
    bytes1[18]=(((bytes1[9]>>4)+(bytes1[15]>>4)+(bytes1[16]>>4)+(bytes1[17]>>4)+0x0D)<<4)+0x01 
end
bytes=bytes1 
end

Ответы [ 2 ]

2 голосов
/ 03 марта 2020

Это может быть Lua. Он имеет elseif и nil и математическую библиотеку с функцией .floor().

2 голосов
/ 01 марта 2020

Похоже на язык программирования Lua, https://www.lua.org/

Я не могу сказать, является ли это какой-то тип диалекта или нет, но кажется, что это действительно Lua, который создает байты, которые связаны с отправляемыми инфракрасными командами.

часть \/, по-видимому, является неким типом экранирования, размещенного там, потому что это недопустимый фрагмент кода Lua afaik. (https://www.tutorialspoint.com/lua/lua_operators.htm).

См. Также что означает lua оператор ~ = среднее?

...