为什么传递asNumber' ed字符串的返回值会打破io?

时间:2014-10-12 18:02:17

标签: iolanguage

我刚刚开始了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 返回转换为数字的接收器。初始空格被忽略。

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

我本可以做更多的研究,但是对于谷歌来说,这是不可能的......

1 个答案:

答案 0 :(得分: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方法。