Bagaimana cara saya mengkonversi NSString
nilai NSData
?
ios
objective-c
nsstring
nsdata
Nick
sumber
sumber
NSString
menggunakan UTF-16 secara internal sehingga mungkin ada sedikit peningkatan kinerja karena tidak harus melakukan konversi UTF-16 <-> UTF-8. Secara pribadi, kami lebih suka (seperti yang disarankan @ gnasher729) daripada kinerja dan menggunakan UTF-8 di mana-mana.Anda dapat mengambil referensi dari tautan ini
sumber
NSData *data = [@"helowrld" dataUsingEncoding:NSUTF8StringEncoding];
Melakukan:
maka jangan ragu untuk melanjutkan
NSJSONSerialization:JSONObjectWithData
.Koreksi jawaban terkait terminator NULL
Mengikuti komentar, dokumentasi resmi, dan verifikasi , jawaban ini diperbarui sehubungan dengan penghapusan dugaan terminator NULL:
Seperti yang didokumentasikan oleh dataUsingEncoding ::
Seperti yang didokumentasikan oleh getCString: maxLength: encoding: and cStringUsingEncoding ::
sumber
dataUsingEncoding:
tidak mengembalikan data yang dihentikan nol. HanyaUTF8String
dan metode lain yang mengembalikan string C mengembalikan string yang diakhiri null.(note that the data returned by dataUsingEncoding:allowLossyConversion: is not a strict C-string since it does not have a NULL terminator)
. Saya pasti melewatkan ini sebelumnya. Saya pasti akan menulis apa pun di masa depan.cStringUsingEncoding:
. Saya mencari di bawahdataUsingEncoding:
.)Seandainya Pengembang Swift datang ke sini,
untuk mengkonversi dari NSString / String ke NSData
sumber
Tujuan-C:
Cepat:
sumber
Pertama, Anda harus menggunakan
dataUsingEncoding:
alih-alih melaluiUTF8String
. Anda hanya menggunakanUTF8String
saat Anda membutuhkanC
string dalam pengkodean itu.Kemudian, untuk
UTF-16
, hanya lewatNSUnicodeStringEncoding
alih-alihNSUTF8StringEncoding
dalamdataUsingEncoding:
pesan Anda .sumber
Untuk Swift 3, Anda sebagian besar akan mengkonversi dari
String
menjadiData
.sumber
sumber
str
berisi poin kode lebih besar dari 127. Ini karenastr.length
memberikan jumlah karakter Unicode, bukan jumlah byte. Misalnya, jikastr
adalah@"にほんご"
,str.length
memberikan 4 sementarastr.UTF8String
sebenarnya mengandung 12 byte. Meskipun Anda menggantinyastr.length
denganstrlen(str.UTF8String)
, itu akan tetap salah untuk kasus di manastr
berisi karakter NULL, seperti@"にほ\0んご"
.Tujuan-C:
NSString ke NSData:
NSData ke NSString:
Cepat:
String ke Data:
Data ke String:
sumber
sumber
Objektif-C
Cepat
sumber