0

刚开始matasano安全挑战,同时考虑学习IO。所以现在,我被困在挑战 1 中,我需要将字符串转换为 base64。

无论如何,我已经到了需要将二进制转换为十进制的地步,这是我的方法:

binToDec := method( bin, <-- program does not enter this method
  dec := 0
  rem := 0
  i := 0

  while ( bin != 0,
    rem = bin % 10
    bin = bin / 10
    dec = dec + rem * 2 pow( i )
    i = i + 1
  )
  return dec
)

toBase64Ascii := method( slice,
  tmp := ""
  for( a, 0, slice size,  <-- construct a string to use with asNumber
    tmp = tmp .. slice at( a )
  )
  dec := binToDec( tmp asNumber ) <-- the line that make the whole thing crash
)

for ( a, 0, bin size, 6,
  tmp := toBase64Ascii( bin slice( a, a + 6 )
  ***some more code***
)

没有错误消息或任何东西,程序只是无限期地挂起。

来自文档: asNumber 返回转换为数字的接收者。初始空格被忽略。

所以我必须说我在这里很困惑,发生了什么?

我会做更多的研究,但 io 对谷歌来说是不可能的......

4

1 回答 1

1

我不确定您的binToDec方法的预期输入和输出是什么,但是

while ( bin != 0,
  rem = bin % 10
  bin = bin / 10
  dec = dec + rem * 2 pow( i )
  i = i + 1
)

很可能是一个无限循环。bin是一个反复除以的浮点数10,这并不意味着它曾经达到过0

我需要将字符串转换为base64。

请注意,序列上有asBase64fromBase64方法。

于 2014-10-12T21:01:05.420 回答