Как мне преобразовать значение NSString в NSData? - PullRequest
899 голосов
/ 23 мая 2009

Как преобразовать значение NSString в NSData?

Ответы [ 11 ]

1404 голосов
/ 23 мая 2009
NSString* str = @"teststring";
NSData* data = [str dataUsingEncoding:NSUTF8StringEncoding];
65 голосов
/ 10 марта 2015
NSString *str = @"helowrld";
// This converts the string to an NSData object
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

Вы можете взять ссылку по этой ссылке

32 голосов
/ 25 октября 2011

Do:

NSData *data = [yourString dataUsingEncoding:NSUTF8StringEncoding];

тогда не стесняйтесь, чтобы продолжить NSJSONSerialization:JSONObjectWithData.


Исправление к ответу относительно терминатора NULL

После комментариев, официальной документации и проверок этот ответ был обновлен в отношении удаления предполагаемого терминатора NULL:

  1. Как задокументировано dataUsingEncoding: :

    Возвращаемое значение

    Результат вызова dataUsingEncoding:allowLossyConversion: с NO в качестве второго аргумента

  2. Как задокументировано getCString: maxLength: кодировка: и cStringUsingEncoding: :

    обратите внимание, что данные, возвращаемые dataUsingEncoding:allowLossyConversion:, не являются строгой C-строкой, поскольку не имеет терминатора NULL

20 голосов
/ 03 марта 2015

В случае появления Swift Developer,

для преобразования из NSString / String в NSData

var _nsdata = _nsstring.dataUsingEncoding(NSUTF8StringEncoding)
17 голосов
/ 27 марта 2016

Objective-C:

NSString *str = @"test string";
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:str];
NSString *thatStr = [NSKeyedUnarchiver unarchiveObjectWithData:data];

Swift:

let str = "test string"
let data = NSKeyedArchiver.archivedData(withRootObject: str)
let thatStr = NSKeyedUnarchiver.unarchiveObject(with: data) as! String
10 голосов
/ 13 сентября 2012

Прежде всего, вы должны использовать dataUsingEncoding: вместо того, чтобы проходить через UTF8String. Вы используете UTF8String только когда вам нужна строка C в этой кодировке.

Затем для UTF-16 просто введите NSUnicodeStringEncoding вместо NSUTF8StringEncoding в своем сообщении dataUsingEncoding:.

6 голосов
/ 01 ноября 2016

Для Swift 3 вы будете в основном конвертировать из String в Data.

let myString = "test"
let myData = myString.data(using: .utf8)
print(myData) // Optional(Data)
6 голосов
/ 27 ноября 2015
NSString *str = @"hello";
NSData *data = [NSData dataWithBytes:str.UTF8String length:str.length];
2 голосов
/ 14 марта 2019

Objective-C:

NSString to NSData:

NSString* str= @"string";
NSData* data=[str dataUsingEncoding:NSUTF8StringEncoding];

NSData to NSString:

NSString* newStr = [[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding];

Swift:

Строка для данных:

var testString = "string"
var somedata = testString.data(using: String.Encoding.utf8)

Данные в строку:

var backToString = String(data: somedata!, encoding: String.Encoding.utf8) as String!
1 голос
/ 14 апреля 2018
NSString *str = @"Banana";
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:true];
...