lua 二进制流数据进行编码或解码
时间: 2024-03-06 15:48:57 浏览: 242
二进制编码/解码支持-natural language processing with python 无水印pdf
Lua 自带的字符串类型是支持二进制数据的,因此可以直接对二进制流数据进行编码或解码。以下是一些常用的编码和解码方法:
1. Base64 编码和解码:
```lua
local b64 = require("base64")
-- 编码
local encoded_data = b64.encode("Hello, world!")
print(encoded_data) -- SGVsbG8sIHdvcmxkIQ==
-- 解码
local decoded_data = b64.decode("SGVsbG8sIHdvcmxkIQ==")
print(decoded_data) -- Hello, world!
```
2. Hex 编码和解码:
```lua
-- 编码
local function hex_encode(data)
return (data:gsub(".", function (c)
return string.format("%02x", string.byte(c))
end))
end
local encoded_data = hex_encode("Hello, world!")
print(encoded_data) -- 48656c6c6f2c20776f726c6421
-- 解码
local function hex_decode(data)
return (data:gsub("..", function (cc)
return string.char(tonumber(cc, 16))
end))
end
local decoded_data = hex_decode("48656c6c6f2c20776f726c6421")
print(decoded_data) -- Hello, world!
```
3. UTF-8 编码和解码:
```lua
-- 编码
local encoded_data = "Hello, world!":gsub(".", function (c)
return string.format("%%%02X", string.byte(c))
end)
print(encoded_data) -- %48%65%6C%6C%6F%2C%20%77%6F%72%6C%64%21
-- 解码
local decoded_data = encoded_data:gsub("%%(%x%x)", function (hex)
return string.char(tonumber(hex, 16))
end)
print(decoded_data) -- Hello, world!
```
需要注意的是,以上方法只是一些基础的编码和解码方式,对于一些复杂的数据结构或协议,可能需要使用专门的编码和解码库。
阅读全文