0

たださのセキュリティチャレンジを始めたばかりで、同時に IO の学習も考えました。だから今、文字列をbase64に変換する必要がある課題1に行き詰まっています。

とにかく、2進数から10進数に変換する必要があるところまで来ました。ここに私のアプローチがあります:

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 に変換する必要があります。

シーケンスには メソッドasBase64とメソッドがあることに注意してください。fromBase64

于 2014-10-12T21:01:05.420 に答える