¿Cómo puedo iterar a través de [NSData bytes]
uno por uno y anexarlos a NSMutableString
o imprimirlos usando NSLog()
?Iterar a través de NSData bytes
Respuesta
En lugar de anexar bytes en una cadena mutable, cree una cadena utilizando los datos:
// Be sure to use the right encoding:
NSString *result = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];
Si realmente quiere colocar a través de los bytes:
NSMutableString *result = [NSMutableString string];
const char *bytes = [myData bytes];
for (int i = 0; i < [myData length]; i++)
{
[result appendFormat:@"%02hhx", (unsigned char)bytes[i]];
}
actualización! Desde iOS 7, existe una nueva forma preferida de iterar a través de todos los bytes en un objeto NSData.
Debido a que un NSData
ahora puede estar compuesto por varios trozos de matrices de bytes disjuntos bajo el capó, llamando [NSData bytes]
a veces puede ser la memoria-ineficiente, ya que necesita para aplanar todos los trozos que subyacen en una única matriz de bytes para la persona que llama.
Para evitar este comportamiento, es mejor enumerar los bytes utilizando el método enumerateByteRangesUsingBlock:
de NSData, que devolverá los rangos de los fragmentos subyacentes existentes, a los que puede acceder directamente sin necesidad de generar ninguna estructura de matriz nueva. Por supuesto, deberá tener cuidado de no hurgar de manera inapropiada en el conjunto de estilo C proporcionado.
NSMutableString* resultAsHexBytes = [NSMutableString string];
[data enumerateByteRangesUsingBlock:^(const void *bytes,
NSRange byteRange,
BOOL *stop) {
//To print raw byte values as hex
for (NSUInteger i = 0; i < byteRange.length; ++i) {
[resultAsHexBytes appendFormat:@"%02x", ((uint8_t*)bytes)[i]];
}
}];
- 1. ¿Convertir bytes de NSData a NSString?
- 2. Como lee bytes desde NSData
- 3. Iterar a través de DataSet
- 4. Copie una parte de la matriz de bytes NSData a otro tipo NSData
- 5. ¿Cómo convertir NSData a matriz de bytes en iPhone?
- 6. NSData a int
- 7. Byte Array a NSData
- 8. ¿Cómo iterar a través de una cadena y verificar el valor de bytes de cada carácter?
- 9. Enviar y recibir NSData a través de GameKit
- 10. ¿Es posible iterar a través de JSONArray?
- 11. Cómo iterar a través de SAFEARRAY **
- 12. Iterar a través de la cola estándar
- 13. Iterar a través de una matriz C
- 14. Iterar a través de 2 listas
- 15. Perl iterar a través de cada coincidencia
- 16. Cómo iterar a través de una cadena
- 17. iterar a través de la tabla Lua
- 18. Cómo iterar a través de una DataTable
- 19. Cómo iterar a través de un fd_set
- 20. Iterar a través fechas en SQL
- 21. Iterar a través del nivel N Niños
- 22. Convierta nsdictionary a nsdata
- 23. NSData a NSString devuelve nulo
- 24. Convertir NSData a base64encoded Y una matriz de bytes en C#
- 25. mysql, iterar a través de los nombres de columna
- 26. Iterar a través de una tabla Lua de C++?
- 27. Iterar a través de las filas de Sqlite-query
- 28. iterar a través de los parámetros de saltarse la primera
- 29. Iterar a través de nombres de campos struct en MATLAB
- 30. Iterar a través de un rango de Excel
¿Cuál debería ser la línea doSomethingWithChar, p. si quiero agregar la representación hexadecimal del byte a un NSMutableString? – yannis
¿y si el nsdata no es realmente una cadena? ¿Qué pasa si contiene 0x00 bytes? Entonces no podrá iterar a través de datos completos. –