2012-06-28 39 views
18

Làm cách nào để nhận được độ dài byte là NSString? nếu myString chứa "hallo", myString.length sẽ trả lại 5, nhưng có bao nhiêu byte thực tế được lấy?Độ dài bằng byte của NSString là bao nhiêu?

+0

Có bao nhiêu byte thực tế được thực hiện ** khi **? Tôi hy vọng bạn nhận ra rằng độ dài tính theo byte phụ thuộc vào mã hóa ... – borrrden

+0

Dường như câu hỏi khá rõ ràng là có bao nhiêu byte khi nó ngồi đó trong biểu diễn bên trong của nó trong một NSString, là UTF16, vì vậy câu trả lời là mất 2 byte cho mỗi ký tự (đối với hầu hết các phần - có một số ký tự unicode có nhiều hơn 1 điểm mã UTF16 để biểu diễn.). – Baxissimo

Trả lời

49
NSString *[email protected]"ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
NSUInteger bytes = [test lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; 
NSLog(@"%i bytes", bytes); 
+0

Điều này chuyển đổi chuỗi thành UTF8 từ biểu diễn bên trong của UTF16, vì vậy nó không cho bạn biết số lượng bộ nhớ mà NSString thực sự đang sử dụng. – Baxissimo

5

Để có được các byte sử dụng

NSData *bytes = [string dataUsingEncoding:NSUTF8StringEncoding]; 

Sau đó, bạn có thể kiểm tra bytes.length

Số byte tùy thuộc vào mã hóa chuỗi

5

Vâng:

NSString* string= @"myString"; 
NSData* data=[string dataUsingEncoding:NSUTF8StringEncoding]; 
NSUInteger myLength = data.length; 
0

Từ số Apple documentation:

Đối tượng NSString mã hóa chuỗi văn bản Unicode tuân thủ, được trình bày dưới dạng chuỗi đơn vị mã UTF-16. Tất cả độ dài, nhân vật chỉ số, và phạm vi được thể hiện trong điều kiện của nền tảng-endian 16-bit giá trị, với giá trị chỉ số bắt đầu từ 0.

Vì vậy, các bộ nhớ được sử dụng bởi một NSString là 2 byte cho mỗi nhân vật cộng với bất cứ điều gì bộ nhớ cố định được sử dụng bởi chính đối tượng đó.

Các vấn đề liên quan