incrustar caracteres en int y viceversa

Tengo una tarjeta inteligente en la que puedo almacenar bytes (múltiplo de 16). Si lo hago: Save(byteArray, length) entonces puedo hacer Receive(byteArray,length) y creo que obtendré la matriz de bytes en el mismo orden que almacené. Ahora, tengo tal problema. Me di cuenta de que si almacenaba números enteros en esta tarjeta, y alguna otra máquina (con diferente endianness) lo lee, puede obtener datos erróneos. Entonces, pensé que tal vez la solución es que siempre almacene datos en esta tarjeta, de una manera un poco endiana, y siempre recupero los datos de una manera un poco endiana (escribiré aplicaciones para leer y escribir, así que soy libre de interpretar los números como lo hago). me gusta.). es posible? Aquí hay algo que he encontrado:

Incrustar entero en la matriz de caracteres:

 int x; unsigned char buffer[250]; buffer[0] = LSB(x); buffer[1] = LSB(x>>8); buffer[2] = LSB(x>>16); buffer[3] = LSB(x>>24); 

Importante es que creo que la función LSB debería devolver el byte menos significativo independientemente de las endiannes de la máquina. ¿Cómo se vería esa función LSB?

Ahora, para reconstruir el entero (algo como esto):

 int x = buffer[0] | (buffer[1]<<8) | (buffer[2]<<16) | (buffer[3]<<24); 

Como dije, quiero que esto funcione, independientemente de las endiannes de la máquina que lo lee y lo escribe. esto funcionara?

La función ‘LSB’ se puede implementar a través de una macro como se muestra a continuación:

 #define LSB(x) ((x) & 0xFF) 

Siempre que x no esté firmado.

Si su biblioteca de C es compatible con posix, entonces tiene funciones estándar disponibles para hacer exactamente lo que está tratando de codificar. ntohl , ntohs , htonl , htons (red a host largo, red a host corto, …). De esa manera, no tiene que cambiar su código si desea comstackrlo para una architecture de big-endian o de little-endian. Las funciones se definen en arpa/inet.h (consulte http://linux.die.net/man/3/ntohl ).

Creo que la respuesta a su pregunta es SÍ, puede escribir datos en una tarjeta inteligente de manera que los lectores puedan leerla de forma universal (y correcta) tanto de orientación big endian como little endian. Con una gran advertencia: le correspondería al lector hacer la interpretación, no a la tarjeta inteligente que interpreta al lector, ¿no es así? Es decir, como saben, hay muchas rutinas para determinar la endianess ( 1 , 2 , 3 ). Pero son los lectores los que deberían contener código para probar la endianess, no su tarjeta.

El ejemplo de su código funciona, pero no estoy seguro de que sea necesario dada la naturaleza del problema tal como se presenta.

Por cierto, AQUÍ hay una publicación relacionada.