二进制代码转换成字符串

我正在玩Feed The Beast并想创建一个网络。我已经可以从一台计算机向另一台计算机发送二进制代码。从字符串中获取二进制代码的方法如下:

  bytes = {string.byte(s,i,string.len(s))}
  binary = ""

  for i,number in ipairs(bytes)do
    c = 0

    while(number>0do
      binary =(number%2)..binary
      number = number-(number%2)
      number = number / 2
      c = c + 1
    end

    while(c <8do
      binary =“0”..binary
      c = c + 1
    end
  end

  返回二进制
end

function toBinsbinary = toBinStrings)
  返回= {}
  c = 1

  for i = 1,string.lenbinarydo
    char = string.subbinaryiiiftonumberchar)== 0)then
      ret [c] = 0
      c = c + 1
    elseiftonumberchar)== 1)then
      ret [c] = 1
      c = c + 1
    elseiftonumberchar))then
      print(“错误:期待'0'或'1',但得到'\”,char,”\''。)
    结束
  end

  返回零
end

如何获取在string.byte(...)中使用的字符串?

点赞
用户204011
用户204011

以下是一种可能的方法:

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,1,-1)},以使你的代码正常工作。

请注意,使用 unpack() 会限制可以解码的字符串的大小。如果你想解码任意长度的字符串,可以将最后一行(return string.char(unpack(r)):reverse()) 替换为以下内容:

for i=1,#r do
  r[i] = string.char(r[i])
end
return table.concat(r):reverse()
2013-07-15 13:17:03