11 stellige zahl einlesen auch mit . dazwischen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Dottakopf

Betreff: 11 stellige zahl einlesen auch mit . dazwischen

BeitragMi, Sep 05, 2007 9:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hio Blitzer !

ok ich gebs gleich mal zu... varriablen deklaration und ihre "typen" hab ich kommplett überspungen.
Ich wollt mal fragen ob es sein kann, das integer zahlen keine 11 stellingen zahlen hinbekommen ??

also ich les ne ip adresse (noch ohne . dazwischen) mit nummer% = readline(bla) ein
und erstelle diese mit writeline(bla,nummer) aus. Macht er aber nicht.
Braucht "nummer" ne andere deklaration ?

und nochwas, ich möchte eine ip adresse einlesen --->192.186.x.y die punkte sind ja eigentlich strings wie bekomm ich des genauso eingelesen und ausgeben wie es oben geschrieben wurde ?
(mit den punkten zwischen den zahlen halt)

~Edit~
achja ich arbeite mit dem "print" befehl kenn da zwar keine einschränkung aber wer weiß ?
Code: [AUSKLAPPEN]


Global zahl%

daten = OpenFile("lol.txt")
              zahl = ReadLine(daten)
CloseFile(daten)

print "" +zahl
waitkey




mfg Dottakopf
  • Zuletzt bearbeitet von Dottakopf am Mi, Sep 05, 2007 10:10, insgesamt einmal bearbeitet

BladeRunner

Moderator

BeitragMi, Sep 05, 2007 10:08
Antworten mit Zitat
Benutzer-Profile anzeigen
11-stellig: Nein, die Genauigkeitsgrenze liegt für floats bei 6 Stellen, und Integer speichern -2 Mrd - +2 Mrd, also 10 Stellen.

Ausserdem, wie Du schon erkannt hast ist eine IP-Adresse ja keine klassische Zahl - sie besteht ja aus 4 einzelnen Zahlen.

Was also tun?
Laden und speichern kannst du es zum einen als String (ql:readstring, ql:writestring), oder aber Du liesst die einzelnen Zahlen aus und speicherst sie als Bytes (da jedes der 4 Subsegmente nur von 0-255 geht). Zusammen gibt das dann wieder einen Integer, der ist auch 4 Byte lang. (ql:Readstring, ql:mid,ql:len,ql:instr.,ql:writebyte).

MOMENT!
Da gibt es auch noch andere Möglichkeiten...
zB. ql:DottedIP
Die Onlinehilfe sollte da helfen.
Und per Forensuche findet man mehrere Funktionen zum Umwandeln.
Viel Erfolg beim Studieren und Probieren.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Dottakopf

Betreff: .

BeitragMi, Sep 05, 2007 10:20
Antworten mit Zitat
Benutzer-Profile anzeigen
cool danke !

genau sowas brauch ich. jedoch versehe ich das "aufsplitten" des integerwerts in einen string ned so ganz.

also wenn ich jetzt die ip nummer 192.168.100.50 hab (oder irgendwas ähnliches halt) wie bekomm ich dan dazu die integer zahl raus. Wie ist des nachvollziehbar das aus "1234567" diese ip wird "223.220.28.63"?

geht es auch andersrum, also ich hab diese dottedip und möchte einen integer draus machen ?

~edit~
ich möchte halt in einer .txt datei nur die ip bzw den integerwert der ip reinschreiben und das dieser dann ausgeben wird. (blos wie bekomm ich den integer wert)

mfg Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

SpionAtom

BeitragMi, Sep 05, 2007 10:57
Antworten mit Zitat
Benutzer-Profile anzeigen
String sind da wirklich angebrachter. Integer solltest du nur benutzen, wenn du mit den Werten noch rechnen willst.

Edit: In der OH wird erläutert, wie die Ip aus der Integerzahl zustande kommt. Mithilfe von gesplitteten Binärzahlen. Du musst also wissen, wie man aus Dezimalzahlen Binärzahlen bekommt und umgekehrt. Dafür gibts den Befehl Bin$, der aber nur Dezimal->Binär abdeckt. Binär->Dezimal hab ich mir eben schnell im Forum gesucht^^ (ist aber auch nicht schwer). Dann brauchst du noch ein wenig Erfahrung, um Strings zu splitten, und voila! du hast deine Integer:
Code: [AUSKLAPPEN]
ip = 1234567
dIp$ = DottedIP(ip)

Print "Ursprungs-Integer: " + ip
Print "IP: " + dIp$


;DottedIp - >Integer:------------
   s1$ = nwort$(dIp, 1, ".")
   s2$ = nwort$(dIp, 2, ".")
   s3$ = nwort$(dIp, 3, ".")
   s4$ = nwort$(dIp, 4, ".")
   z1 = Int(s1$)
   z2 = Int(s2$)   
   z3 = Int(s3$)
   z4 = Int(s4$)
   b1$ = Right(Bin$(z1), 8)
   b2$ = Right(Bin$(z2), 8)
   b3$ = Right(Bin$(z3), 8)
   b4$ = Right(Bin$(z4), 8)   
   b$ = b1$ + b2$ + b3$ + b4$
   iIp = binToNum(b$)

    Print "Binärcode: " + b$
   Print "Integer: " + iIp
;--------------------------------

WaitKey: End

Function BinToNum(tbin$)   
   let=Len(tbin$)
   For x=1 To let
      num=Int(Mid$(tbin$,x,1))
      If Not(num=0 Or num=1) Then y=1
   Next
   If y=1 Then Return 0   
   For x=1 To let     
      z=z+(Int(Mid$(tbin$,x,1)) Shl (let-x))
   Next
   Return z   
End Function

Function nwort$(satz$, wort, trenn$ = " ")
If wort < 1 Then Return ""
satz$ = satz$ + trenn$
w = 0
pos = 1
   While w < wort And pos > 0
      While Mid$(satz$, pos, 1) = trenn$      
      pos = pos + 1
      Wend      
      x = pos
      y = Instr(satz$, trenn$, pos)
      pos = y
      w = w + 1
   Wend
Return Mid$(satz$, x, y - x)
End Function
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Dottakopf

Betreff: .

BeitragMi, Sep 05, 2007 12:01
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für deine anstrengugnen, weis ich sehr zu schätzen !

ich hab des bespiel durchgearbeitet aber in diesen string auslese sachen bin ich einfach ne niete Sad
Aber ich hab mir nochmal meine npc funktionen von meinem rpg angeschaut und hab da gemerkt, dass man schon zahlen über 11 stellen anzeigen kann, wäre ja lustig wenn des nicht gehen würde...

eure codes waren viel zu umständlich für etwas so simples was ich haben wollte Very Happy
Da ich nur die zahlen aus der datei angezeigt haben möchte.

ließt aus einer text datei eine ip-addresse aus und schreibt diese auf den bildschirm (192.168.100...)
Code: [AUSKLAPPEN]

Global zeile$
daten = OpenFile("lol.txt")
   zeile = ReadLine(daten)
CloseFile(daten)


Print "" + zeile


WaitKey


hätt ich vielleicht anders formulieren sollen ~

trotzdem nochmal danke, ist gut des mal gesehen zu haben weil ich kann mich nicht ewig davor drücken

mfg Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group