ฉันจะแปลงNSStringค่าเป็นNSDataอย่างไร
ฉันจะแปลงNSStringค่าเป็นNSDataอย่างไร
คำตอบ:
NSString* str = @"teststring";
NSData* data = [str dataUsingEncoding:NSUTF8StringEncoding];
NSStringใช้ UTF-16 ภายในเพื่อให้มีประสิทธิภาพเพิ่มขึ้นเล็กน้อยเนื่องจากไม่จำเป็นต้องแปลง UTF-16 <-> UTF-8 โดยส่วนตัวเราชอบ (ตามที่ @ gnasher729 แนะนำ) ความทนทานกว่าประสิทธิภาพและใช้ UTF-8 ได้ทุกที่
ทำ:
NSData *data = [yourString dataUsingEncoding:NSUTF8StringEncoding];
NSJSONSerialization:JSONObjectWithDataแล้วรู้สึกฟรีเพื่อดำเนินการต่อไปด้วย
ตามความเห็นเอกสารทางการและการตรวจสอบคำตอบนี้ได้รับการปรับปรุงเกี่ยวกับการลบเทอร์มินัล NULL ที่ถูกกล่าวหา:
ตามที่บันทึกไว้โดยdataUsingEncoding ::
ส่งคืนค่า
ผลลัพธ์ของการเรียกใช้
dataUsingEncoding:allowLossyConversion:ด้วยไม่ใช่เป็นอาร์กิวเมนต์ที่สอง
ตามที่บันทึกไว้โดยgetCString: maxLength: encoding:และcStringUsingEncoding ::
โปรดทราบว่าข้อมูลที่ส่งคืนโดย
dataUsingEncoding:allowLossyConversion:ไม่ใช่สายอักขระ C ที่เข้มงวดเนื่องจากไม่มีจุดสิ้นสุด NULL
dataUsingEncoding:ไม่ส่งคืนข้อมูลที่สิ้นสุดด้วยค่า null เฉพาะUTF8Stringและวิธีการอื่น ๆ ที่ส่งคืนสตริง C ส่งคืนสตริงที่สิ้นสุดด้วยค่า null
(note that the data returned by dataUsingEncoding:allowLossyConversion: is not a strict C-string since it does not have a NULL terminator)- ฉันต้องพลาดเรื่องนี้ไปก่อนหน้านี้ แม้ว่าฉันจะแน่ใจว่าจะเขียนอะไรในอนาคต
cStringUsingEncoding:ฉันกำลังมองหาอยู่dataUsingEncoding:)
ในกรณีที่ Swift Developer มาที่นี่
การแปลงจาก NSString / String เป็น NSData
var _nsdata = _nsstring.dataUsingEncoding(NSUTF8StringEncoding)
Objective-C:
NSString *str = @"test string";
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:str];
NSString *thatStr = [NSKeyedUnarchiver unarchiveObjectWithData:data];
สวิฟท์:
let str = "test string"
let data = NSKeyedArchiver.archivedData(withRootObject: str)
let thatStr = NSKeyedUnarchiver.unarchiveObject(with: data) as! String
ปิดครั้งแรกที่คุณควรใช้แทนจะผ่านdataUsingEncoding: UTF8Stringคุณใช้UTF8Stringเมื่อคุณต้องการCสตริงในการเข้ารหัสเท่านั้น
จากนั้นUTF-16เพียงแค่ส่งNSUnicodeStringEncodingแทนข้อความNSUTF8StringEncodingของคุณdataUsingEncoding:
สำหรับสวิฟท์ 3 ส่วนใหญ่คุณจะแปลงจากไปStringData
let myString = "test"
let myData = myString.data(using: .utf8)
print(myData) // Optional(Data)
NSString *str = @"hello";
NSData *data = [NSData dataWithBytes:str.UTF8String length:str.length];
strมีรหัสจุดที่ใหญ่กว่า 127 เนื่องจากstr.lengthเป็นจำนวนอักขระ Unicode ไม่ใช่จำนวนไบต์ ตัวอย่างเช่นถ้าstrเป็น@"にほんご", str.lengthให้ 4 ในขณะที่str.UTF8Stringจริงมี 12 ไบต์ แม้ว่าคุณจะแทนที่str.lengthโดยstrlen(str.UTF8String)มันจะยังคงไม่ถูกต้องสำหรับกรณีที่มีตัวอักษรเป็นโมฆะเช่นstr @"にほ\0んご"
Objective-C:
NSString ไปยัง NSData:
NSString* str= @"string";
NSData* data=[str dataUsingEncoding:NSUTF8StringEncoding];
NSData ถึง NSString:
NSString* newStr = [[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding];
สวิฟท์:
สตริงกับข้อมูล:
var testString = "string"
var somedata = testString.data(using: String.Encoding.utf8)
Data to String:
var backToString = String(data: somedata!, encoding: String.Encoding.utf8) as String!
NSString *str = @"Banana";
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:true];
Objective-C
NSString *str = @"Hello World";
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO];
รวดเร็ว
let str = "Hello World"
let data = string.data(using: String.Encoding.utf8, allowLossyConversion: false)