Tengo un valor int que debe ser convertida en una matriz de bytes.
¿Cómo se puede ir sobre hacer esto en Objective-C? Hay métodos para hacer esto?

Gracias,

InformationsquelleAutor suse | 2010-04-22

2 Comentarios

  1. 6

    Convertidos en qué sentido? Lo quieres en little endian, big endian o nativo de orden de bytes? Si desea que en el nativo de orden de bytes, entonces todo lo que usted necesita hacer es:

    int val = //... inicializar entero de alguna manera 
    char* bytes = (char*) &val; 
    int len = sizeof(int); 
    

    Que dijo, la mejor manera de manipular los bytes de un entero es para hacer operaciones a nivel de bit. Por ejemplo, para obtener el menor de orden de byte, puede utilizar val&0xFF, para obtener el siguiente utiliza (val>>8)&0xFF, entonces (val>>16)&0xFF, entonces (val>>24)&0xFF, etc.

    Por supuesto, depende del tamaño de su tipo de datos. Si haces ese tipo de cosas, usted realmente debe incluir <inttypes.h>; y el uso de uint8_t, uint16_t, uint32_t, o uint64_t, dependiendo del tamaño de un entero desea; de lo contrario, no pueden jugar con los números más grandes de bytes.

    • Asumiendo que usted sabe que es un número entero, no podía usted sólo tiene que utilizar un bucle y el uso de los múltiplos de 8 fiable para jugar con sus bytes usando la longitud de determinar a partir de sizeof()?
  2. 1

    Sospecho que lo que quieres hacer es pasar esta matriz de bytes en algún lugar, posiblemente, a un NSMutableData objeto. Usted sólo tiene que pasar la dirección de &val

    Ejemplo:

    [myData appendBytes:&myInteger length:sizeof(myInteger)]; 

    Este enlace es más completa y ofertas con el endianness:

    Anexar NSInteger a NSMutableData

    • Para un int tipo de datos, por ejemplo, de 21 devolverá 15 00 00 00 en la matriz de bytes o como NSData, o en la matriz de bytes. {15, 00, 00, 00}. Pero a veces me quieren, en orden inverso, <00 00 00 15> en hexadecimal o en la matriz como int (21) = {00, 00, 00, 15}. En caso de que este enfoque no funcionará.

Dejar respuesta

Please enter your comment!
Please enter your name here