Alternative zu atoi() ?



  • hi,

    ich versuche ip addressen zu sortieren, dafür hab ich die von file
    eingelesenen ip´s in die einzelnen oktets getrennt und als eine zahl
    in einen string konvengiert z.b.

    192.168.2.1
    192168002001

    82.1.52.100
    082100520100

    so nun müsste ich das als zahl konventieren um es zu sortieren zu können
    dazu gesagt werden muss vor den string kommt immer noch eine "1", weil
    will ja ip´s sortieren.

    192168002001
    108210052000

    ^^ so also. (1.082.100.052.100) so schaut das aus, weils über ne millarde immer ist hab ich "long unsigned int" genommen, ja nun will ich in ne zahl
    umwandeln und der spuckt nur scheiss zahlen aus, kleinere zahlen gehen,
    liegt wohl an atoi, weiß jemand wie ich den string nun in zahl umwandeln kann ?



  • und wenn du es einzeln vergleichst zb

    213.102.80.1 mit 213.101.0.0
    die nimmst immer die ersten 8bit also 213 und 213
    wenn diese gleich sind vergleichst du die naechsten 8bit, 102 und 101

    // EDIT ach bloedsinn verwend "strtol" das sollte funktionieren



  • wie wärs mit sscanf...
    wenn du zum vergleich draus ne zahl machen willst einfach 32 bittigen integralen datentyp nehmen (z.b. integer ist meist 32 bit) und da packst du dann die dann einfach rein (also entsprechend shiften 24 16 und 8 und 0 mal alles verodern)



  • Konnte man nicht auch Strings mit <,> etc vergleichen? Macht bei Buchstaben zwar wenig Sinn, aber da Zahlen in der ASCII-Tabelle so "sortiert" sind als ob sie eine Zahl wären, sollte das doch gehen...

    Oder erzähle ich gerade totalen Quatsch, weil das mit <,> gar nicht geht und sich in einer mir unbekannten Gehirnwindung diese Vermutung zusammengeschustert hat?!
    Mir war aber so.......



  • MG80S schrieb:

    Konnte man nicht auch Strings mit <,> etc vergleichen? Macht bei Buchstaben zwar wenig Sinn, aber da Zahlen in der ASCII-Tabelle so "sortiert" sind als ob sie eine Zahl wären, sollte das doch gehen...

    1. geht das nicht
    2. koennte man aber strcmp verwenden
    3. geht das aber nicht
      weil die strings ja nicht gleich lang sind.

Anmelden zum Antworten