板块里有人用lua吗?请教一个lua问题。

时间:2021-05-21 18:57:54
最近项目用到LUA,第一次用,问一个反序列化问题如下:

local buffers = socket.receive();

这里拿到的buffers一个接受数据的字节流字符串,假如前4个字节是整数,
类似的情况在C里面我们可以直接
int i;
memcpy(&i, buffers, 4);
拿到。
那么,在LUA里面有没有什么简便方法,直接拿到这个整数。

11 个解决方案

#1


用 标准库函数 string.sub (s, i [, j])

Returns the substring of s that starts at i and continues until j; i and j can be 
negative. If j is absent, then it is assumed to be equal to -1 (which is the same as
 the string length). In particular, the call string.sub(s,1,j) returns a prefix of s
 with length j, and string.sub(s, -i) returns a suffix of s with length i. 

 Lua 5.1 Reference Manual 
http://www.lua.org/manual/5.1/manual.html#5.4

#2


虽然看过一些,脚本语言一概不熟

但记得似乎lua中有个用户类型吧,Userdata?,可以定义struct,指针之类。而且这个类型是专门对C、C++接口语言的。

至于怎么弄还是楼主自己查吧,呵呵。

#3


string

你去看看这个。

一直在用LUA。。。。。。。。。。

#4


其实还有一种方法,因为LUA本身可以和C进行交互,你可以把要处理的数据丢出来给C处理,C处理完成后,再把结果传给LUA。

#5


没用过lua,不知道有什么优势

#6


lua是个啥咚咚?

#7


好像不行,因为你的字符串已经是整数了(二进制表达),而不是整数的字符串表达。后者可以通过tonumber搞定,前者不知道怎么办,Lua有强转命令吗?

#8


string.byte (s [, i [, j]])

可能这个行。

#9


引用 8 楼 yang79tao 的回复:
string.byte (s [, i [, j]])

可能这个行。


目前我就用的这种方式把4个字符(字节)一个接一个的移位到整数变量里面去。

虽然是可以做,但总觉得做法不太官方啊。

所以来征集,看有咩有更简便的方法。

#10


引用 1 楼 gameslq 的回复:
用 标准库函数 string.sub (s, i [, j])


C/C++ code
Returns the substring of s that starts at i and continues until j; i and j can be 
negative. If j is absent, then it is assumed to be equal to -1 (whi……


这个函数只是拿子串,并不是这个的问题。

#11


该回复于2012-01-13 11:50:43被版主删除

#1


用 标准库函数 string.sub (s, i [, j])

Returns the substring of s that starts at i and continues until j; i and j can be 
negative. If j is absent, then it is assumed to be equal to -1 (which is the same as
 the string length). In particular, the call string.sub(s,1,j) returns a prefix of s
 with length j, and string.sub(s, -i) returns a suffix of s with length i. 

 Lua 5.1 Reference Manual 
http://www.lua.org/manual/5.1/manual.html#5.4

#2


虽然看过一些,脚本语言一概不熟

但记得似乎lua中有个用户类型吧,Userdata?,可以定义struct,指针之类。而且这个类型是专门对C、C++接口语言的。

至于怎么弄还是楼主自己查吧,呵呵。

#3


string

你去看看这个。

一直在用LUA。。。。。。。。。。

#4


其实还有一种方法,因为LUA本身可以和C进行交互,你可以把要处理的数据丢出来给C处理,C处理完成后,再把结果传给LUA。

#5


没用过lua,不知道有什么优势

#6


lua是个啥咚咚?

#7


好像不行,因为你的字符串已经是整数了(二进制表达),而不是整数的字符串表达。后者可以通过tonumber搞定,前者不知道怎么办,Lua有强转命令吗?

#8


string.byte (s [, i [, j]])

可能这个行。

#9


引用 8 楼 yang79tao 的回复:
string.byte (s [, i [, j]])

可能这个行。


目前我就用的这种方式把4个字符(字节)一个接一个的移位到整数变量里面去。

虽然是可以做,但总觉得做法不太官方啊。

所以来征集,看有咩有更简便的方法。

#10


引用 1 楼 gameslq 的回复:
用 标准库函数 string.sub (s, i [, j])


C/C++ code
Returns the substring of s that starts at i and continues until j; i and j can be 
negative. If j is absent, then it is assumed to be equal to -1 (whi……


这个函数只是拿子串,并不是这个的问题。

#11


该回复于2012-01-13 11:50:43被版主删除