아마도 쉬운 일이지만 저는 Lua 초보자입니다...
KVL API를 사용하여 프로젝션 서버를 제어하는 매우 간단한 QSC QSYS 플러그인을 만들고 있습니다. 서버 API는 16진수 문자열을 기반으로 합니다.
예를 들어 이 명령은 서버에 9bf5455689ed4c019731c6dd3c071f0e
uuid 가 있는 재생 목록을 로드하도록 요청합니다 .
Controls["LoadSPL"].EventHandler = function()
sock:Write(
"\x06\x0e\x2b\x34\x02\x05\x01\x0a\x0e\x10\x01\x01\x01\x03\x09\x00\x83\x00\x00\x14\x00\x00\x00\x01\x9b\xf5\x45\x56\x89\xed\x4c\x01\x97\x31\xc6\xdd\x3c\x07\x1f\x0e"
)
end
이제 사용자 인터페이스의 텍스트 상자(또는 서버에서 읽은 사용 가능한 UUID 목록)에 표시된 텍스트에 따라 변수 UUID가 있는 문자열을 생성할 수 있어야 합니다. 이 문자열을 명령의 고정된 부분에 연결하겠습니다. 어떻게 하면 be와 같은 문자열을 올바르게 만들
ad17fc696b49454db17d593db3e553e5
수
\xad\x17\xfc\x69\x6b\x49\x45\x4d\xb1\x7d\x59\x3d\xb3\xe5\x53\xe5
있습니까?
이 시도:
local input = "ad17fc696b49454db17d593db3e553e5"
local output = input:gsub("%w%w", function(s) return string.char(tonumber(s, 16)) end)
설명: 이것은 모든 문자 쌍을 가져와 기본 16 숫자 문자열로 해석한 다음 해당 숫자의 문자를 가져와 원래 문자를 대체하는 데 사용합니다.
편집: 무슨 일이 일어나고 있고 다른 답변이 잘못된 이유를 명확히 하기 위해 \xad
Lua 소스 코드의 기능인 백슬래시 이스케이프 시퀀스 는 메모리에서 값 이 있는 바이트로 표시되는 173
것처럼 값 A
이 있는 바이트로 표시됩니다. 65
. 리터럴 백슬래시 문자를 16진수 문자와 연결하려고 하면 이스케이프 코드가 생성되지 않습니다. 따라서 이를 수행하는 방법은 수동으로 를 사용하는 것 string.char
입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다