2012-06-28 18 views
18

Come ottengo la lunghezza di byte di NSString? se myString contiene "hallo", myString.length restituirà 5, ma quanti byte effettivi vengono presi?Qual è la lunghezza in byte di una NSString?

+0

Quanti byte effettivi vengono presi ** quando **? Spero che tu ti renda conto che la lunghezza in byte dipende dalla codifica ... – borrrden

+0

Sembra abbastanza chiaro che la domanda riguarda quanti byte ci vuole quando è seduto lì nella sua rappresentazione interna in una NSString, che è UTF16, quindi la risposta è prende 2 byte per carattere (per la maggior parte - ci sono alcuni caratteri Unicode che richiedono più di 1 punto di riferimento UTF16 da rappresentare). – Baxissimo

risposta

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

Converte la stringa in UTF8 dalla sua rappresentazione interna di UTF16, quindi non indica la quantità di memoria effettivamente utilizzata dall'NSString. – Baxissimo

5

per ottenere i byte usano

NSData *bytes = [string dataUsingEncoding:NSUTF8StringEncoding]; 

Quindi è possibile controllare bytes.length

Numero di byte dipende dalla codifica stringa

5

Bene:

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

Dalla Apple documentation: Un oggetto NSString

codifica una stringa di testo Unicode-compliant, rappresentato come una sequenza di UTF-16 unità di codice. Tutte le lunghezze, carattere indici e intervalli sono espressi in termini di 16 bit piattaforma endian valori, con valori di indice a partire da 0.

Quindi la memoria utilizzata da un NSString è 2 byte per carattere più qualunque la memoria fissa viene utilizzata dall'oggetto stesso.

Problemi correlati