2014-11-29 11 views
7

Sto caricando le righe da un file di testo con numeri molto grandi. String ha il metodo toInt, ma come si converte una stringa in un Int64 che sarà in grado di gestire i numeri grandi?In Swift, come si converte una stringa in Int64?

non vedo un metodo toInt64 o un Tolong ecc Ci deve essere un modo, ma non ho trovato nulla cercando ancora.

In alternativa, suppongo di poter leggere i numeri nella stringa cifra per cifra (o per gruppi di cifre) e quindi aggiungerli insieme a fattori appropriati di dieci, ma sembra eccessivo. O forse il modo corretto è quello di leggere i dati in una forma binaria e convertirli in quel modo?

Grazie

+2

Se si compila come un 64-bit app poi 'Int' * è * un intero a 64 bit. –

+1

Mentre le risposte qui sotto sono perfettamente valide, nel mio caso la risposta di @MartinR è stata la più utile. Se lo aggiungi come risposta, posso darti il ​​credito della risposta. – shim

risposta

0

(Dal mio commento sopra :) Se si compila come un 64-bit app poi Intè a 64 bit numero intero.

10

Se non ti dispiace utilizzando NSString, si può fare questo

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

Si noti che diversamente Toint(), longLongValue restituirà 0 se la stringa non è un numero legale, mentre Toint() restituirà nil in quel caso.

+0

Sto provando a fare la stessa cosa ma ottenere un Int64 senza segno. Ho provato a guardare attraverso NSString ma sfortunatamente non esistono metodi che restituiscano un UInt64. Mi chiedevo se avessi qualche idea? Forse dovrebbe essere una nuova domanda? – Lightbulb1

+0

@ Lightbulb1 puoi usare la funzione C 'strtoull'. Esempio: 'strtoull (str, nil, 10)'. Il primo parametro è la stringa e il terzo parametro è la base da cui convertire. Non so quale sia la dose del secondo parametro. –

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 significa STRingTOLongLong

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

15

Come di Swift 2.1.1 si può semplicemente inizializzare Int64 con String

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