Wednesday, 8 November 2017

Wifstream Binary Options


Estoy leyendo un archivo binario como: Pero me estoy dando cuenta de que esto no es una lectura binaria verdadera. El ifstream realmente lee un byte y lo convierte en un char. Así que si el archivo binario tiene el contenido 0x112233. Ff. En realidad, leer 0x110022003300. Ff00. Esto no tiene mucho sentido para mí: en primer lugar, sólo necesito usar un fstream ancho porque el nombre del archivo no es latino. En segundo lugar, si digo que el fstream es binario, ¿por qué leer leer caracteres de ancho El código a continuación hace lo que quiero. ¿Hay una manera de lograr que el uso std fstreams preguntó Mar 21 11 a las 19:15 I39m con Visual Studio para Windows y compilador Intel para Linux. Su solución funcionó bien en Windows. Todavía no lo he probado en Linux. Es una solución bastante elegante. I39d prefiere no confiar en extensiones del compilador sin embargo. ¿Crees que puedes hacer esto siguiendo el estándar, tal vez especificando el charset como un parámetro plantilla a ifstream ndash rturrado Mar 22 11 a las 15:15 rturrado: (eliminado mi comentario anterior) No recomiendo más Boost. Filesystem desde su Enfoque es definir diferentes interfaces en diferentes plataformas, lo que básicamente causa problemas de portabilidad y hace que sea más difícil escribir código Unicode correcto. Desde mi experiencia, es mejor seguir el enfoque que escribí en el EDIT. Ndash ybungalobill Ago 23 12 at 13: 00ltfstreamgt Incluye el encabezado estándar iostreams ltfstreamgt para definir varias clases que soportan las operaciones de iostreams en secuencias almacenadas en archivos externos. La clase template describe un buffer de flujo que controla la transmisión de elementos del tipo Elem. Cuyos rasgos de carácter están determinados por la clase Tr. Hacia y desde una secuencia de elementos almacenados en un archivo externo. Un objeto de clase basicfilebufltElem, Trgt almacena un puntero de archivo. Que designa el objeto FILE que controla el flujo asociado con un archivo abierto. También almacena punteros a dos facetas de conversión de archivos para su uso por el desbordamiento de funciones de miembro protegido y el desbordamiento. El constructor almacena un puntero nulo en todos los punteros que controlan el búfer de entrada y el búfer de salida. También almacena un puntero nulo en el puntero de archivo. El tipo es un sinónimo del parámetro de plantilla Elem. La función miembro devuelve un puntero nulo si el puntero de archivo fp es un puntero nulo. De lo contrario, llama a fclose (fp). Si esa función devuelve un valor distinto de cero, la función devuelve un puntero nulo. De lo contrario, devuelve esto para indicar que el archivo se cerró correctamente. Para un flujo amplio, si se han producido inserciones desde que se abrió el flujo, o desde la última llamada a streampos. La función llama overflow (). También inserta cualquier secuencia necesaria para restaurar el estado de conversión inicial. Utilizando la facet fac de conversión de archivos para llamar a fac. unshift según sea necesario. Cada byte de elemento de tipo char así producido se escribe en el flujo asociado designado por el puntero de fichero fp como si por llamadas sucesivas de la forma fputc (byte, fp). Si la llamada a fac. unshift o cualquier escritura falla, la función no tiene éxito. El tipo es un sinónimo de traitstype :: inttype. La función miembro devuelve true si el puntero de archivo no es un puntero nulo. El tipo es sinónimo de traitstype :: offtype. La función miembro se esfuerza por abrir el archivo con filename filename. Llamando a fopen (filename, strmode). Aquí strmode se determina a partir del modo amp iosbase :: in se convierte en r (abrir el archivo existente para la lectura). Iosbase :: out o iosbase :: out iosbase :: trunc se convierte en w (truncar el archivo existente o crear para escribir). Iosbase :: out iosbase :: app se convierte en (archivo abierto existente para agregar todas las escrituras). Iosbase :: in iosbase :: out se convierte en r (abrir el archivo existente para leer y escribir). Iosbase :: in iosbase :: out iosbase :: trunc se convierte en w (trunca el archivo existente o crea para leer y escribir). Iosbase :: in iosbase :: out iosbase :: app se convierte en (abrir un archivo existente para leer y para anexar todas las escrituras). Si el modo amp iosbase :: binario es distinto de cero, la función añade b a strmode para abrir un flujo binario en lugar de un flujo de texto. A continuación, almacena el valor devuelto por fopen en el puntero de archivo fp. Si el modo amp iosbase :: ate es distinto de cero y el puntero del archivo no es un puntero nulo, la función llama a fseek (fp, 0, SEEKEND) para posicionar el flujo al final del archivo. Si esa operación de posicionamiento falla, la función llama a cerrar (fp) y almacena un puntero nulo en el puntero del archivo. Si el puntero de archivo es un puntero nulo, la función devuelve un puntero nulo. De lo contrario, devuelve esto. Si meta traitstype :: eof (). La función de miembro virtual protegida se esfuerza por insertar el elemento ch traitstype :: tochartype (meta) en el búfer de salida. Puede hacerlo de varias maneras: Si una posición de escritura está disponible, puede almacenar el elemento en la posición de escritura e incrementar el siguiente puntero para el buffer de salida. Puede establecer una posición de escritura al asignar almacenamiento nuevo o adicional para el búfer de salida. Puede convertir cualquier salida pendiente en el búfer de salida, seguido por ch. Utilizando la faceta fac de conversión de archivos para llamar a fac. out según sea necesario. Cada elemento ch de tipo char así producido se escribe en el flujo asociado designado por el puntero de fichero fp como si por llamadas sucesivas de la forma fputc (ch, fp). Si cualquier conversión o escritura falla, la función no tiene éxito. Si la función no puede tener éxito, devuelve traitstype :: eof (). De lo contrario, devuelve traitstype :: noteof (meta). La función de miembro virtual protegido se esfuerza por devolver un elemento al búfer de entrada. Luego haga que sea el elemento actual (señalado por el siguiente puntero). Si meta traitstype :: eof (). El elemento a empujar hacia atrás es efectivamente el que ya está en la corriente antes que el elemento actual. De lo contrario, ese elemento es reemplazado por ch traitstype :: tochartype (meta). La función puede poner de nuevo un elemento de varias maneras: Si una posición de putback está disponible, y el elemento almacenado allí se compara igual a ch. Puede simplemente decrementar el siguiente puntero para el búfer de entrada. Si la función puede poner una posición de putback disponible, puede hacerlo, establecer el siguiente puntero para apuntar a esa posición y almacenar ch en esa posición. Si la función puede empujar un elemento hacia atrás en el flujo de entrada, puede hacerlo, por ejemplo llamando a ungetc para un elemento de tipo char. Si la función no puede tener éxito, devuelve traitstype :: eof (). De lo contrario, devuelve traitstype :: noteof (meta). El tipo es un sinónimo de traitstype :: postype. La función de miembro virtual protegido se esfuerza por alterar las posiciones actuales de los flujos controlados. Para un objeto de clase basicfilebufltElem, Trgt. Una posición de flujo puede ser representada por un objeto de tipo fpost. Que almacena un desplazamiento y cualquier información de estado necesaria para analizar una corriente ancha. El cero de desplazamiento designa el primer elemento de la secuencia. (Un objeto del tipo postype almacena al menos un objeto fpost.) Para un archivo abierto tanto para lectura como para escritura, tanto las entradas como las salidas se colocan en tándem. Para cambiar entre insertar y extraer, debe llamar a pubseekoff o pubseekpos. Las llamadas a pubseekoff (y por lo tanto seekoff) tienen varias limitaciones para los flujos de texto. Secuencias binarias. Y corrientes anchas. Si el puntero de archivo fp es un puntero nulo, la función falla. De lo contrario, se esfuerza por alterar la posición del flujo llamando a fseek (fp, off, way). Si esa función tiene éxito y la posición resultante fposn se puede determinar llamando a fgetpos (fp, ampfposn). La función tiene éxito. Si la función tiene éxito, devuelve un valor de tipo postype que contiene fposn. De lo contrario, devuelve una posición de flujo no válida. La función de miembro virtual protegido se esfuerza por alterar las posiciones actuales de los flujos controlados. Para un objeto de clase basicfilebufltElem, Trgt. Una posición de flujo puede ser representada por un objeto de tipo fpost. Que almacena un desplazamiento y cualquier información de estado necesaria para analizar una corriente ancha. El cero de desplazamiento designa el primer elemento de la secuencia. (Un objeto del tipo postype almacena al menos un objeto fpost.) Para un archivo abierto tanto para lectura como para escritura, tanto las entradas como las salidas se colocan en tándem. Para cambiar entre insertar y extraer, debe llamar a pubseekoff o pubseekpos. Las llamadas a pubseekoff (y por lo tanto seekoff) tienen varias limitaciones para los flujos de texto. Secuencias binarias. Y corrientes anchas. Para un flujo amplio, si se han producido inserciones desde que se abrió el flujo, o desde la última llamada a streampos. La función llama overflow (). También inserta cualquier secuencia necesaria para restaurar el estado de conversión inicial. Utilizando la facet fac de conversión de archivos para llamar a fac. unshift según sea necesario. Cada byte de elemento de tipo char así producido se escribe en el flujo asociado designado por el puntero de fichero fp como si por llamadas sucesivas de la forma fputc (byte, fp). Si la llamada a fac. unshift o cualquier escritura falla, la función no tiene éxito. Si el puntero de archivo fp es un puntero nulo, la función falla. De lo contrario, se intenta alterar la posición del flujo llamando a fsetpos (fp, ampfposn). Donde fposn es el objeto fpost almacenado en pos. Si esa función tiene éxito, la función devuelve pos. De lo contrario, devuelve una posición de flujo no válida. La función miembro protegida devuelve cero si el puntero de archivo fp es un puntero nulo. De lo contrario, llama a setvbuf (fp, buffer (char), IOFBF. Count sizeof (Elem)) para ofrecer la matriz de elementos de recuento que comienzan en el búfer como un búfer para el flujo. Si esa función devuelve un valor distinto de cero, la función devuelve un puntero nulo. De lo contrario, devuelve esto para señalar el éxito. La función miembro protegida devuelve cero si el puntero de archivo fp es un puntero nulo. De lo contrario, devuelve cero sólo si las llamadas a overflow () y fflush (fp) tienen éxito al limpiar cualquier salida pendiente de la secuencia. El tipo es un sinónimo para el parámetro de plantilla Tr. La función de miembro virtual protegido se esfuerza por extraer el elemento actual ch del flujo de entrada y devolver el elemento como typestype :: tointtype (ch). Puede hacerlo de varias maneras: Si una posición de lectura está disponible, toma ch como el elemento almacenado en la posición de lectura y avanza el siguiente puntero para el búfer de entrada. Puede leer uno o más elementos de tipo char, como si por llamadas sucesivas de la forma fgetc (fp). Y convertirlos a un elemento ch de tipo Elem utilizando la facet fac de conversión de archivos para llamar fac. in según sea necesario. Si cualquier lectura o conversión falla, la función no tiene éxito. Si la función no puede tener éxito, devuelve traitstype :: eof (). De lo contrario, devuelve ch. Convertido como se ha descrito anteriormente. La clase template describe un objeto que controla la inserción y extracción de elementos y objetos codificados utilizando un buffer de flujo de clase basicfilebuf ltElem, Trgt. Con elementos del tipo Elem. Cuyos rasgos de carácter están determinados por la clase Tr. El objeto almacena un objeto de clase basicfilebufltElem, Trgt. El primer constructor inicializa la clase base llamando a basiciostream (sb). Donde sb es el objeto almacenado de la clase basicfilebuf ltElem, Trgt. También inicializa sb llamando a basefilebuf ltElem, Trgt (). El segundo constructor inicializa la clase base llamando basiciostream (sb). También inicializa sb llamando a basicfilebuf ltElem, Trgt (). Entonces sb. open (filename, mode). Si la última función devuelve un puntero nulo, el constructor llama a setstate (failbit).Boost Users: Estoy tratando de compilar código simple usando utf8codecvtfacet: // ---- UTF8.cpp starts ----------- ------------------- Incluir ltiostreamgt Incluir ltfstreamgt Incluir ltstringgt Incluir ltlocalegt Utilizar espacio de nombres std Int Principal () Localidad loc Localidad local utf8loc (loc, new boost :: programoptions :: detail: : Utf8codecvtfacet ()) wfstream f f. bund (utf8loc) f. open (quotUTF8.txtquot, ios :: binario) wstring sf gtgt s f. close () Funciona bien con VC 8.0 (ambos edificio Boost y este código con VC 8,0). Pero consigo los errores del conectador con VC 7.1 (ambos edificio Boost y este código con VC 7.1): UFT8.obj. Error LNK2001: símbolo no resuelto externo quotprotected: virtual int thiscall boost :: programoptions :: detalle :: utf8codecvtfacet :: doout (int amp, unsigned short const, unsigned short const, unsigned short const amp, char, char, char amp) const quot (Dooutatutf8codecvtfacetatdetailprogramoptionsatboostMBEHAAHPBG1AAPBGPAD3AAPADatZ) UFT8.obj. Error LNK2001: símbolo externo no resuelto quotprotected: virtual int thiscall boost :: programoptions :: detalle :: utf8codecvtfacet :: doin (int, char const, char const, char const amp, unsigned short, unsigned corto, unsigned short amp) const quot (doinatutf8codecvtfacetatdetailprogramoptionsatboostMBEHAAHPBD1AAPBDPAG3AAPAGatZ) Como un enlazador me dice que la referencia es: doinatutf8codecvtfacetatdetailprogramoptionsatboostMBEHAAHPBD1AAPBDPAG3AAPAGatZ Pero biblioteca (auto-ligado libboostprogramoptions-vc71-SGD-1331.lib) contiene: doinatutf8codecvtfacetatdetailprogramoptionsatboostMBEHAAHPBD1AAPBDPAW3AAPAWatZ Cuando agrego Boost / libs / programoptions / src / utf8codecvtfacet. cpp a mi VC 7.1 Proyecto, el código de ejemplo se genera bien. La cuestión es cómo construir este código en VC 7.1 ¿Es necesario reconstruir Aumenta libboostprogramoptions-vc71--1331.lib con algunas opciones del compilador para obtener doinatutf8codecvtfacetatdetailprogramoptionsatboostMBEHAAHPBD1AAPBDPAG3AAPAGatZ exportación o para construir código anterior con algunas opciones para conseguir referencia doinatutf8codecvtfacetatdetailprogramoptionsatboostMBEHAAHPBD1AAPBDPAW3AAPAWatZ Próximo mensaje: Robert Ramey : Re: Boost-usuarios tribool serialization Mensaje anterior: Dean Sturtevant: Boost-users programoptions: cómo recuperar opciones posicionales

No comments:

Post a Comment