バイナリデータをバイト単位で作成および操作するためにluaで使用できるストレージクラスが何であるか把握しようとしています。UDP経由のシリアル化の準備ができているバイナリデータの配列を作成および編集するにはどうすればよいですか?
たとえば、QtにQByteArrayがあるか、またはC++/cにchar(またはuint8_t)の配列があります。 0x00やその他の印刷不可能な文字などの値を処理する必要があるため、文字列が機能するとは思われません。また、私は配列を調べましたが、型を持っているようには見えず、それらを直列化する方法がわかりません。
私はここで立ち往生少しだ、私は次のコード例をしようとします:
-- 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
申し訳ありません:私は戻ってそのバイナリデータを読みたい他の側に続いて
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);
を例の品質のために、私は何もしていませんが、実際にこれを達成する方法はありません...
は、なぜあなたはLuaの文字列があなたのために動作しませんと思いますか?これらは明示的にバイナリデータを扱うように設計されており、Luaのドキュメントではバイナリファイルからデータを読み取るために使用されていることさえ示されています。https://www.lua.org/pil/21.2.2.html – Feneric
@Feneric well ..どのように私はそれをビット操作するのですか?要素をnullまたはその他の印刷不可能な文字に変更しますか? - 私はこれの例を見つけませんでした。編集:hangon私はちょうどあなたのリンクを見た....読み込み –
@大丈夫、私は私が欲しいものの一部を参照してください。しかし、私はまだ値を(例えば)0x00を位置4に追加することはできません - あるいは "文字列"の末尾に0xF3を追加することはできません...私は実際に多くの例/ドキュメントを読み込んでいますが、かなりこの情報を見つける。 (私はバイナリ文字列を自分で作っています - ファイルからの読み込みではありません) –