ฉันจะแปลง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 ส่วนใหญ่คุณจะแปลงจากไปString
Data
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)