0

11 月 11 日有 一款 中国 程序员 中 流行 的游戏. 第 9 个问题非常难(抱歉,那个 url 包含 MD5 和 session,我可以把它贴在这里)。有一些用英文关键字写的中文指南。甚至有人试图用一行 Haskell 来解决这个问题......

所以,问题:

给定一个字符串看起来像这样,并得到下一个问题的关键:

01001000 00110100 01110011 01001001 01000001 01000011 01001010 01001011
01101110 01101100 01000001 01000001 01000001 00101011 00110001 01011010
01000010 00110001

我在这里将整个二进制字符串复制到一个要点中:https ://gist.github.com/4054140

根据指南,二进制代码可以读取为base64代码,然后可以显示为图像..

我的问题是:如何将这些二进制字符串解析为 base64 代码?

4

2 回答 2

0

我尽力解析它并得到一个 tarball ......只有一步到我的目的地但是......

我在 LiveScript 中的解决方案,希望对您有所帮助...

require! \fs
require! \buffer
require! \path
require! \zlib
{exec} = require \child_process

show = console.log 

fs.read-file \string.txt \utf8 (err, file) ->
  # throw err if err?
  res = file
    .replace /\_/g, '1'
    .replace /\n/g, ' '
    .split ' '
    .map -> parse-int it, 2
    .map -> String.from-char-code it
    .join ''

  b = new Buffer res, \base64

  zlib.gunzip b, (err, data) ->
    fs.write-file \c.tar data
于 2012-11-15T11:48:10.453 回答
0

这些看起来像以 2 为底的数字。如果是这种情况,您可以从第一组(“01001000”)中取出每个数字的前 6 位,例如“010010”并获取这 6 位的十进制值。对于第一个数字,您将得到 18 base 10:

 base10 = parseInt("010010", 2) -> 18

下一步是获取该十进制数的 base64。根据此表http://en.wikipedia.org/wiki/Base64 18 将被映射到“S”

然后你取下一组 6 位,这将是第一组 8 位(“00”)中的剩余 2 位加上下一段(“0011”)中的 4 位,并执行相同的操作:

 base10 = parseInt("000011", 2) -> 3

同样,根据 Wikipedia 链接,十进制 3 映射到“D”。

你会继续前进,直到你处理完所有的比特。

此页面包含有关如何将基数 2 转换为基数 10 的信息:http: //www.name-generators.com/javascript-2/how-to-make-binary-decimal-conversion-in-javascript。 htm

于 2012-11-15T05:16:42.343 回答