Lua 二进制代码到字符串
我正在玩Feed The Beast,希望创建一个网络。我已经可以将二进制代码从一台计算机发送到另一台计算机。从字符串中获取二进制代码的方法如下:Lua 二进制代码到字符串,lua,Lua,我正在玩Feed The Beast,希望创建一个网络。我已经可以将二进制代码从一台计算机发送到另一台计算机。从字符串中获取二进制代码的方法如下: function toBinString(s) bytes = {string.byte(s,i,string.len(s))} binary = "" for i,number in ipairs(bytes) do c = 0 while(number>0) do binary = (number
function toBinString(s)
bytes = {string.byte(s,i,string.len(s))}
binary = ""
for i,number in ipairs(bytes) do
c = 0
while(number>0) do
binary = (number%2)..binary
number = number - (number%2)
number = number/2
c = c+1
end
while(c<8) do
binary = "0"..binary
c = c+1
end
end
return binary
end
function toBin(s)
binary = toBinString(s)
ret = {}
c = 1
for i=1,string.len(binary) do
char = string.sub(binary,i,i)
if(tonumber(char)==0) then
ret[c] = 0
c = c+1
elseif(tonumber(char)==1) then
ret[c] = 1
c = c+1
elseif(tonumber(char)) then
print("Error: expected \'0\' or \'1\' but got \'",char,"\'.")
end
end
return ret
end
功能安装
字节={string.byte(s,i,string.len(s))}
binary=“”
对于i,以IPAIR(字节)为单位的数字
c=0
而(数字>0)则执行
二进制=(数字%2)…二进制
编号=编号-(编号%2)
数字=数字/2
c=c+1
结束
而(c这里有一种可能性:
function toBinAndBack(s)
local bin = toBin(s)
local r = {}
for i=1,#bin,8 do
local n = 0
for j=0,7 do
n = n + (2^(7-j)) * bin[i+j]
end
r[#r+1] = n
end
return string.char(unpack(r)):reverse()
end
最后的reverse
是必需的,因为您在toBinString
中对字符串进行了反向编码。此外,我必须将这一行替换为:bytes={string.byte(s,I,string.len(s))}
以使代码正常工作
请注意,使用unpack()
限制可以解码的字符串的大小。如果要解码任意长的字符串,可以将最后一行(return string.char(unpack(r)):reverse()
)替换为:
关于bytes=…
这件事:它对我很有效(在游戏中),所以我没有问题:D无论如何,我将使用你的代码:)非常感谢。在bytes=…
中字符串.len(s)
可能是可以的,但是I
以前从未定义过。它一定来自你代码的其他部分,我猜:)可能是,是的。我认为Ctrl+C是我出现在那里的原因:D
for i=1,#r do
r[i] = string.char(r[i])
end
return table.concat(r):reverse()