Как в Swift преобразовать строку в Int64?

Я загружаю строки из текстового файла с очень большими числами. Строка имеет метод toInt, но как преобразовать строку в Int64, которая сможет обрабатывать большие числа?

Я не вижу метода toInt64 или toLong и т. д. Должен быть способ, но я пока ничего не нашел в поиске.

В качестве альтернативы, я думаю, я мог бы читать числа в строке цифра за цифрой (или по группам цифр), а затем складывать их вместе с соответствующими десятикратными коэффициентами, но это кажется излишним. Или, может быть, правильный способ - прочитать данные в двоичной форме и преобразовать их таким образом?

Спасибо


person shim    schedule 29.11.2014    source источник
comment
Если вы компилируете как 64-битное приложение, то Int является 64-битным целым числом.   -  person Martin R    schedule 29.11.2014
comment
Хотя приведенные ниже ответы совершенно верны, в моем случае ответ @MartinR был наиболее полезным. Если вы добавите это как ответ, я могу дать вам ответ.   -  person shim    schedule 08.04.2015


Ответы (3)


Начиная с Swift 2.1.1 вы можете просто инициализировать Int64 с помощью String

let number: Int64? = Int64("42")
person Laevand    schedule 30.03.2016
comment
Я не думаю, что это слово в Swift 4 - person Sourav Chandra; 26.11.2018

Если вы не возражаете против использования NSString, вы можете сделать это

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

Обратите внимание, что в отличие от toInt(), longLongValue вернет 0, если строка не является допустимым числом, тогда как toInt() вернет nil в этом случае.

person Mobile Ben    schedule 29.11.2014
comment
Я пытаюсь сделать то же самое, но получаю неподписанный Int64. Я пытался просмотреть NSString, но, к сожалению, нет методов, возвращающих UInt64. Мне было интересно, есть ли у вас какие-нибудь идеи? Может быть, это должен быть новый вопрос? - person Lightbulb1; 11.03.2015
comment
@Lightbulb1, вы можете использовать функцию C strtoull. Пример: strtoull(str, nil, 10). Первый параметр — это строка, а третий — база для преобразования. Я не знаю, что вторая доза параметра. - person Gustaf Rosenblad; 09.01.2016

import Darwin

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

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

strtoll означает STRingTOLongLong

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

person Hal    schedule 08.04.2015