Ein echter WTF.



/* convert Hex-String into an integer */
int HexTextToInt(string ToConvert)
{
int iToReturn = 0;
int iExp = 0;
char chByte;

// The string to convert is empty
//
if(ToConvert == "")
return 0;
// The string have more than 8 character (the equivalent value
// exeeds the DWORD capacyty
//
if(ToConvert.length() > 8 )
return 0;

try
{
// We calculate the number using the Hex To Decimal formula
//
for(int i= ToConvert.length()-1; i >= 0; i--){
chByte = ToConvert[i];
switch(int(chByte)){
case 65:
iToReturn += 10*pow(16.0f,iExp);
break;
case 66:
iToReturn += 11*pow(16.0f,iExp);
break;
case 67:
iToReturn += 12*pow(16.0f,iExp);
break;
case 68:
iToReturn += 13*pow(16.0f,iExp);
break;
case 69:
iToReturn += 14*pow(16.0f,iExp);
break;
case 70:
iToReturn += 15*pow(16.0f,iExp);
break;
default:
if((int(chByte) <48)||(int(chByte)>57))
return -1;
iToReturn += atoi(&chByte)*pow(16.0f,iExp);
break;
}
iExp++;
}
}
catch(...)
{
// Error, return 0
//
return 0;
}

return iToReturn;
}


Viele Leute vergnuegen sich ja gerne an trivialsten Programmierproblemen wie diesem hier oder diesem. Aber in meinen Augen ist das ein geloestes Problem, dass man sich mit dem Arsch nicht mehr ansieht.
Und wenn doch, dann doch bitte richtig.

Also starte ich mal folgenden Aufruf.

Schreibt ein Programm in der Programmiersprache eurer Wahl (Ja, auch LOLCode, Brainfuck, Malbolge oder Perl), welches obiges Trivialproblem loest. Eingabe ist ein String in dem sich eine Hex Zahl in ASCII Darstellung befindet (ohne fuehrende 0x oder aehnliches). Man kann annehmen, dass der String vorher vollstaendig in Lowercase konvertiert wurde. Ebenfalls nehmen wir an, dass es sich um Vorzeichenbehaftete 32 bit Zahlen handelt (was obiger Code natuerlich nebenher auch noch falsch macht, wer weiss, warum bekommt n Gummipunkt).

Edit: Natuerlich war es so gemeint, dass man keine bibliotheksfunktionen fuer die konvertierung nutzen soll

Wer noch mehr WTFs findet darf sie natuerlich in den Kommentaren anmerken. Spontan finde ich viele.

(Ich entschuldige mich schonmal fuer die kaputte Formatierung, werd mich nacher mit Tod drum pruegeln das ordentlich hinzubekommen.)

Importierte/Alte Kommentare:

#289: 07.Jul.2008 10:07 von DrNI

In Perl:

$integer = hex($hextstring);

Damit wäre das Problem genug mit dem Arsch angekuckt. Man kann sowas im ersten oder zweiten Semester als Progammierübung schon mal selbst bauen, danach sollte man aber gelernt haben, auf eingebaute Funktionen und Bibliotheken zurückzugreifen. Sonst kommt man ja nie zum Ziel, wenn man mal was größeres schreiben muss.

#290: 07.Jul.2008 10:07 von profmakx

dein Programm funktioniert nicht wie gefordert. (Und ich meine nicht die Ergaenzung zur Aufgabenstellung).

#291: 07.Jul.2008 12:07 von DrNI

Nunja, wenn Du es als vollständiges Programm willst, dann hilft Dir auf der Kommandozeile:
perl -wne 'chomp; print hex;'
Wobei ja nicht spezifiziert ist, wie die Schnittstelle aussehen soll. Hier funktioniert sie über STDIN/STDOUT.

#292: 07.Jul.2008 02:07 von profmakx

deine Funktion tut trotzdem nicht das, was gefordert ist ;).

#293: 07.Jul.2008 04:07 von Dr. Azrael Tod

Wenn man bereits erfahren hat welche Probleme du meinst, scheint es offensichtlich.
Wie bereits gesagt halte ich das aber auch teilweise mit dain begründet dass jemand beim design von C (und allen möglichen anderen Sprachen die das durch die Bank alle übernommen haben) etwas faul war und größeren Aufwand beim Compiler-schreiben vermeiden wollte.
Die Ausweichmöglichkeiten scheinen mir bei den bekannten Sprachen alle nicht ideal.

#294: 07.Jul.2008 04:07 von profmakx

Du kennst Haskell also nicht duckundweg

#295: 07.Jul.2008 05:07 von Dr. Azrael Tod

hab mich nicht damit beschäfftigt... und würde es auch nicht unbedingt unter "bekannte Sprache" einordnen.
BTW: auch in x86-asm würde ich das anders lösen
MUHAHAHAHAHA

Geschrieben von: DAT
Vorheriger Artikel
Defact äh Defekt
Nächster Artikel
the FH-Server is back