如何将NSString值转换为NSData?

912 objective-c nsstring nsdata ios

如何将NSString值转换为NSData

fli*_*ald 1414

NSString* str = @"teststring";
NSData* data = [str dataUsingEncoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

  • NSData不关心它是UTF-8还是UTF-16或UTF-32.有两个问题:一,UTF-16和UTF-32需要正确的字节顺序.二,无论谁将其转换回NSString*都必须知道编码,并且通常会采用UTF-8编码.通常,UTF-8最有可能被正确处理. (4认同)

小智 65

NSString *str = @"helowrld";
// This converts the string to an NSData object
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

你可以从这个链接中参考

  • 一个线性解决方案:`NSData*data = [@"helowrld"dataUsingEncoding:NSUTF8StringEncoding];` (3认同)

And*_*kov 32

做:

NSData *data = [yourString dataUsingEncoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

然后随意继续NSJSONSerialization:JSONObjectWithData.


更正有关NULL终止符的答案

在评论,官方文档和验证之后,关于删除所谓的NULL终止符的更新已得到更新:

  1. 正如dataUsingEncoding所记录的那样:

    回报价值

    dataUsingEncoding:allowLossyConversion:使用NO作为第二个参数调用的结果

  2. getCString记录:maxLength:encoding:cStringUsingEncoding ::

    请注意,返回的数据dataUsingEncoding:allowLossyConversion:不是严格的C字符串,因为它没有NULL终止符

  • 这是错的!请在此处查看我的帖子:http://stackoverflow.com/q/14087094/192819 (14认同)
  • 对.`dataUsingEncoding:`不返回以null结尾的数据.只有`UTF8String`和其他返回C字符串的方法返回一个以null结尾的字符串. (4认同)

Sru*_*Suk 20

如果Swift Developer来到这里,

从NSString/String转换为NSData

var _nsdata = _nsstring.dataUsingEncoding(NSUTF8StringEncoding)
Run Code Online (Sandbox Code Playgroud)


Sha*_*din 18

Objective-C的:

NSString *str = @"test string";
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:str];
NSString *thatStr = [NSKeyedUnarchiver unarchiveObjectWithData:data];
Run Code Online (Sandbox Code Playgroud)

迅速:

let str = "test string"
let data = NSKeyedArchiver.archivedData(withRootObject: str)
let thatStr = NSKeyedUnarchiver.unarchiveObject(with: data) as! String
Run Code Online (Sandbox Code Playgroud)


小智 10

首先,你应该使用dataUsingEncoding:而不是通过UTF8String.您只UTF8String在需要C该编码的字符串时使用.

然后,因为UTF-16,只是传递NSUnicodeStringEncoding而不是NSUTF8StringEncoding在你的dataUsingEncoding:消息中.


jac*_*205 7

对于Swift 3,你将主要转换StringData.

let myString = "test"
let myData = myString.data(using: .utf8)
print(myData) // Optional(Data)
Run Code Online (Sandbox Code Playgroud)


Nex*_*hra 6

NSString *str = @"hello";
NSData *data = [NSData dataWithBytes:str.UTF8String length:str.length];
Run Code Online (Sandbox Code Playgroud)

  • 当`str`包含大于127的代码点时,这个答案是错误的.这是因为`str.length`给出了Unicode字符的数量,而不是字节数.例如,如果`str`是`@"にほんご"`,`str.length`给出4,而`str.UTF8String`实际上包含12个字节.即使用`strlen(str.UTF8String)`替换`str.length`,对于`str`包含NULL字符的情况仍然是错误的,例如`@"にほ\ 0んご"`. (5认同)

小智 5

目标-C:

NSString 到 NSData:

NSString* str= @"string";
NSData* data=[str dataUsingEncoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

NSData 到 NSString:

NSString* newStr = [[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

迅速:

字符串到数据:

var testString = "string"
var somedata = testString.data(using: String.Encoding.utf8)
Run Code Online (Sandbox Code Playgroud)

数据到字符串:

var backToString = String(data: somedata!, encoding: String.Encoding.utf8) as String!
Run Code Online (Sandbox Code Playgroud)


Đôn*_* An 5

更新 Swift 5.x

let str = "teststring"
let data = str.data(using: .utf8)
Run Code Online (Sandbox Code Playgroud)