2017-01-27 11 views
1

В Lua У меня есть следующие шестнадцатеричной строкиLua шестнадцатеричная строка каждые два символа вставки символа

local string="7661722061737472696e673d226c6f6c223b" 

Как я могу ввести/вставить «%» в качестве разделителя между каждыми двумя символами.

Я хочу, чтобы это выглядело так.

%76%61%72%20%61%73%74%72%69%6e%67%3d%22%6c%6f%6c%22%3b 

ответ

2

Простой способ заключается в использовании string.gsub заменить шаблон соответствия с захваченной строкой и ваш сепаратором. Полученная строка будет иметь предыдущий разделитель, который можно удалить, взяв фрагмент строки с начала плюс длину разделителя.

См. §6.4.1 – Patterns для лучшего понимания соответствия шаблонов.

local function sep (str, patt, re) 
    return str:gsub(patt, '%' .. re .. '%1'):sub(1 + #re) 
end 

print(sep('7661722061737472696e673d226c6f6c223b', '%x%x', '%')) 
--> 76%61%72%20%61%73%74%72%69%6e%67%3d%22%6c%6f%6c%22%3b 

Альтернативным способом было бы разделить строку в таблицу, а затем использовать table.concat присоединиться таблицу в строку.

Исчерпывающий способ состоит в том, чтобы подсчитывать каждый символ nth в цикле и принимать строковые фрагменты, объединяя результат до сих пор и разделитель.

1

Вот еще одно решение с gsub:

s="7661722061737472696e673d226c6f6c223b" 
t=s:gsub("..","%%%1") 
print(t) 

Он читает: соответствуют два символа и заменить их % и матч, таким образом, Предварение % на двух персонажей.

 Смежные вопросы

  • Нет связанных вопросов^_^