我想弄清楚我可以在lua中使用哪些存儲類來創建和操縱二進制數據逐字節。如何創建和編輯準備好通過UDP進行序列化的二進制數據數組?
例如Qt有QByteArray,或者C++/c有char(或uint8_t)數組。我不覺得一個字符串會起作用,因爲我需要處理諸如0x00和其他不可打印字符的值。此外,我看着數組,但他們似乎沒有類型,我不知道如何序列化它們。
我有點困在這裏,我會盡量做到以下代碼示例:
local socket = require("socket")
-- this does not work, just to show what I am dreaming of doing
-- |len |type | payload |
local msgData = {0x05, 0x3A, 0x00, 0xF4, 0x04}
-- edit part of the payload
msgData[3] = 0x01
-- Send it over UDP
udp:sendto(msgData, "127.0.0.1", 50000);
然後在另一邊,我想讀的二進制數據傳回:
-- This is how I normally read the data, but "data" I guess is just a string, how can I collect the binary data?
data, ip, port = udp:receivefrom()
--data = udp:receive()
if data then
print("RX UDP: " .. data .. " - from: " .. ip .. ":" .. port)
end
對不起對於質量的例子,但我沒有什麼可行的,並沒有真正的想法如何實現這一點...
你覺得爲什麼一個Lua字符串不會爲你工作?它們被明確設計爲處理二進制數據,Lua文檔甚至顯示它們用於從二進制文件中讀取數據:https://www.lua.org/pil/21.2.2.html – Feneric
@Feneric well .. 。我該如何操縱它?並將元素更改爲null或其他不可打印的字符? - 我還沒有找到任何這樣的例子。編輯:hangon我剛纔看到你的鏈接....閱讀 –
@Feneric好吧,我看到了我想要的部分。然而,我仍然無法看到如何將值(例如)0x00添加到位置4 - 或在「字符串」末尾添加0xF3 ...我確實已經通讀了很多示例/文檔,但不能完全找到這個信息。 (我自己製作二進制字符串 - 不是從文件中讀取) –