Deje L y B sean dos máquinas. L orden sus bits de de LSB (Bit Menos Significativo) a MSB (bit más significativo) mientras B orden desde el MSB al LSB. O, en otras palabras, L usa Little Endian mientras que B usa Big Endian bit - no debe confundirse con el orden de bytes.¿Cómo afecta el bit endianismo a los cambios de bit y archivo IO en C?
Problema 1 RESUELTO:
Estamos escribiendo el siguiente código que se quiere ser portátil:
#include <stdio.h>
int main()
{
unsigned char a = 1;
a <<= 1;
printf("a = %d\n", (int) a);
return 0;
}
en L, se imprimirá 2, pero lo que sucede en B? ¿Cambiará el 1 e imprimirá 0 ?.
SOLUCIÓN: La definición C99 en 6.5.7 dice que, al menos en tipos de enteros sin signo, <<
y >>
se multiplique y divida por 2 respectivamente.
Problema 2:
Estamos escribiendo el siguiente código que se quiere ser portátil:
programa READ:
/* program READ */
#include <stdio.h>
int main()
{
FILE* fp;
unsigned char a;
fp = fopen("data.dat", "rb");
fread(&a, 1, 1, fp);
fclose(fp);
return 0;
}
y el programa de ESCRITURA:
/* program WRITE */
#include <stdio.h>
int main()
{
FILE* fp;
unsigned char a = 1;
fp = fopen("data.dat", "wb");
fwrite(&a, 1, 1, fp);
fclose(fp);
return 0;
}
lo sucede si ejecutamos ESCRIBIR en L, mo ve el archivo de datos a B y ejecuta LEER allí? Y si ejecutamos ESCRIBIR en B y luego LEER en L?
Disculpe si se trata de una pregunta frecuente. Busqué en Google durante horas sin suerte.
Así que dices Endianidad de bits es irrelevante en el archivo IO. ¿Es esto algún tipo de estándar? Si es así, ¿puedes publicar enlaces a donde está definido? – rogi
Ahora esto tiene sentido. – rogi
E/S de archivo se define como la lectura de bytes completos. No puedes leer menos de un byte de un archivo. El orden de los bits depende de la interfaz con el medio de almacenamiento (SCSI, SATA, almacenamiento masivo USB, etc.) y me imagino que solo se verán afectadas las interfaces serie (por ejemplo, SATA pero no PATA). – tomlogic