2012-06-28 19 views
18

¿Cómo obtengo la longitud de bytes de NSString? si myString contiene "hola", myString.length devolverá 5, pero ¿cuántos bytes reales se toman?¿Cuál es la longitud en bytes de un NSString?

+0

¿Cuántos bytes reales se toman ** cuando **? Espero que se den cuenta de que la longitud en bytes depende de la codificación ... – borrrden

+0

Parece bastante claro que la pregunta es cuántos bytes se necesitan cuando está sentado allí en su representación interna en un NSString, que es UTF16, así que la respuesta es toma 2 bytes por carácter (en su mayor parte, hay algunos caracteres Unicode que toman más de 1 punto de código UTF16 para representar). – Baxissimo

Respuesta

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

Esto convierte la cadena en UTF8 de su representación interna de UTF16, por lo que no le dice la cantidad de memoria que realmente usa NSString. – Baxissimo

5

para obtener los bytes utilizan

NSData *bytes = [string dataUsingEncoding:NSUTF8StringEncoding]; 

continuación, podrá comprobar bytes.length

Número de bytes dependerá de la cadena de codificación

5

Bueno:

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

Desde el Apple documentation:

objeto Una NSString codifica una cadena de texto compatible con Unicode, representado como una secuencia de UTF-16 unidades de código. Todas las longitudes, de carácter índices, y los rangos se expresan en términos de valores plataforma-endian de 16 bits, con valores de índice a partir de 0.

Así la memoria utilizada por un NSString es de 2 bytes por carácter más cualquier la memoria fija es utilizada por el objeto mismo.

Cuestiones relacionadas