2014-11-29 12 views
7

Ich lade Zeilen aus einer Textdatei mit sehr großen Zahlen. String hat die Methode toInt, aber wie wandelt man eine Zeichenkette in eine Int64 um, die mit den großen Zahlen umgehen kann?In Swift, wie konvertiert man einen String zu Int64?

Ich sehe keine ToInt64-Methode oder eine ToLong etc. Es muss einen Weg geben, aber ich habe noch nichts gefunden durch die Suche.

Alternativ könnte ich die Zahlen in der Zeichenfolge Ziffer für Ziffer (oder durch Gruppen von Ziffern) lesen und sie dann zusammen mit geeigneten Faktoren von zehn hinzufügen, aber das scheint wie Overkill. Oder ist der richtige Weg, die Daten in einer binären Form zu lesen und so umzuwandeln?

Dank

+2

initialisieren Wenn Sie als App 64-Bit kompilieren dann 'Int' * ist * eine 64-Bit-Integer. –

+1

Während die folgenden Antworten perfekt sind, war in meinem Fall die Antwort von @MartinR am hilfreichsten. Wenn Sie es als Antwort hinzufügen, kann ich Ihnen die Antwort gutschreiben. – shim

Antwort

0

(Von meinem obigen Kommentar :) Wenn Sie als 64-Bit-Anwendung kompiliert dann Intist ein 64-Bit ganze Zahl.

10

Wenn Sie nichts dagegen haben, NSString verwenden, können Sie diese

let str = "\(LLONG_MAX)" 
let strAsNSString = str as NSString 
let value = strAsNSString.longLongValue 

Hinweis tun, dass im Gegensatz zu toInt(), longLongValue 0 zurück, wenn die Zeichenfolge keine juristische Nummer während toInt ist() gibt in diesem Fall nil zurück.

+0

Ich versuche das gleiche zu tun, aber einen nicht signierten Int64. Ich habe versucht, durch NSString zu sehen, aber leider gibt es keine Methoden, die ein UInt64 zurückgeben. Ich habe mich gefragt, ob du irgendwelche Ideen hast? Vielleicht sollte es eine neue Frage sein? – Lightbulb1

+0

@ Lightbulb1 können Sie die C-Funktion 'strtoull' verwenden. Beispiel: 'strtoull (str, nil, 10)'. Der erste Parameter ist der String und der dritte Parameter ist die Basis, aus der konvertiert werden soll. Ich weiß nicht, was der zweite Parameter dosiert. –

1
import Darwin 
let str = ... 
let i = strtoll(str, nil, 10) 
1
import Darwin 

let strBase10 = "9223372036854775807" 
let i64FromBase10 = strtoll(strBase10, nil, 10) 

let strBase16 = "0xFFFFFFFFFFFFFFFF" 
let i64FromBase16 = strtoll(strBase16, nil, 16) 

strtoll bedeutet STRingTOLongLong

http://www.freebsd.org/cgi/man.cgi?query=strtoll

15

Ab Swift 2.1.1 Sie einfach Int64 mit String

let number: Int64? = Int64("42")