Tengo un código que manipula archivos binarios usando fstream con el indicador binario establecido y utilizando las funciones de E/S sin formato de lectura y escritura. Esto funciona correctamente en todos los sistemas que he usado (los bits en el archivo son exactamente como se esperaba), pero esos son básicamente todos inglés de los Estados Unidos. Me he estado preguntando sobre la posibilidad de que estos bytes sean modificados por un codecvt en un sistema diferente.Escribir archivos binarios usando C++: ¿importa la configuración regional predeterminada?
Parece que el estándar dice que usar E/S sin formato se comporta de la misma manera que poner caracteres en el streambuf usando sputc/sgetc. Esto conducirá a que se llamen las funciones de desbordamiento o desbordamiento en el streambuf, y parece que conducen a cosas que pasan por algún codecvt (por ejemplo, ver 27.8.1.4.3 en el estándar de C++). Para basic_filebuf, la creación de este codecvt se especifica en 27.8.1.1.5. Esto hace que parezca que los resultados dependerán de lo que devuelve basic_filebuf.getloc().
Entonces, mi pregunta es, ¿puedo asumir que una matriz de caracteres escrita usando stream.write en un sistema puede recuperarse textualmente usando ifstream.read en otro sistema, sin importar la configuración regional que cualquiera de las personas pueda estar usando en su ¿sistema? Me gustaría hacer las siguientes suposiciones:
- El programa está utilizando la configuración regional predeterminada (es decir, el programa no es cambiar el propio configuración regional en absoluto).
- Los sistemas tienen CHAR_BIT 8, tienen el mismo orden de bits dentro de cada byte, almacenan archivos como octetos, etc.
- Los objetos de flujo tienen establecido el indicador binario.
- No tenemos que preocuparnos por ninguna diferencia de endianess en esta etapa. Si algún byte en la matriz debe interpretarse como un valor de varios bytes, las conversiones de endianess se manejarán según sea necesario en una etapa posterior.
Si la configuración regional predeterminada no está garantizada para pasar este material sin modificaciones en alguna configuración del sistema (no sé, árabe o algo así), ¿cuál es la mejor forma de escribir archivos binarios usando C++?
Creo que deberías agregar el mismo orden de bytes a tu suposición. ¿O estoy totalmente fuera de allí? –
@TheScottMachine: Space_C0wb0y tiene razón, agregue el mismo orden de bytes a sus suposiciones – Stan
Gracias, agregué una suposición adicional para aclarar. – TheScottMachine