2014-10-12 5 views
0

방금 ​​matasano 보안 문제에 착수하여 IO 학습에 대해 생각했습니다. 이제는 문자열을 base64로 변환해야하는 도전 1에 갇혀 있습니다.왜 asNumber'ed 문자열의 반환 값을 전달하면 io가 손상됩니까?

오류 메시지 또는 아무것도가없는
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*** 
) 

이 프로그램은 단지 무기한 중단 :

어쨌든 내가 진수 바이너리 변환하는 데 필요한 지점에 왔어요, 여기 내 aproach입니다.

문서에서 : asNumber 숫자로 변환 된 수신기를 반환합니다. 초기 공백은 무시됩니다.

그래서 나는 여기에서 매우 혼란스러워한다고 말해야 만합니다.

는 좀 더 많은 연구를했을하지만 IO는 내가 당신의 binToDec 방법의 예상 입력 및 출력이 무엇인지 확실하지 않다를 위해 ...

+0

Google에 'iolanguage'를 사용하십시오. – Bergi

답변

1

Google에이 불가능 해하지만,

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

은 무한 루프 일 가능성이 높습니다. bin10으로 반복적으로 나눠지는 부동 소수점 숫자입니다. 이는 0에 도달 한 것을 의미하지 않습니다.

문자열을 base64로 변환해야합니다.

시퀀스에는 asBase64fromBase64 메서드가 있습니다.

+0

맞습니다. 이것은 무한 루프입니다. 'decToBin' 메쏘드에 대해 혼란스러워합니다. 왜냐하면 제 디버그는 인쇄되지 않은 곳에 메서드를 인쇄하기 때문입니다. 어느 것이 또 다른 질문으로 이어집니다. io에서 표현식은 어떻게 평가됩니까? 나는 이것을 지금 내 자신을 들여다 볼 것이다. 고맙습니다 ! – Arkeopix

+0

메서드를 실행하는 동안 출력 큐가 플러시되지 않았을 수 있습니다. 무한 루프가 없으면 디버그 메시지가 표시됩니다. – Bergi