Quiero leer los bytes sin signo de un archivo binario. Así que escribí el siguiente código.C++ leyendo el carácter sin signo de la secuencia de archivos
#include <iostream>
#include <fstream>
#include <vector>
#include <istream>
std::string filename("file");
size_t bytesAvailable = 128;
size_t toRead = 128;
std::basic_ifstream<unsigned char> inf(filename.c_str(), std::ios_base::in | std::ios_base::binary) ;
if (inF.good())
{
std::vector<unsigned char> mDataBuffer;
mDataBuffer.resize(bytesAvailable) ;
inF.read(&mDataBuffer[0], toRead) ;
size_t counted = inF.gcount() ;
}
Esto resulta en la lectura en siempre 0 bytes como se muestra por la variable contada.
Parece haber referencias en la web que dicen que necesito configurar la configuración regional para que esto funcione. Cómo hacer esto exactamente no está claro para mí.
El mismo código funciona utilizando el tipo de datos char 'en lugar de 'unsigned char'
El código anterior utilizando unsigned char parece funcionar en Windows pero no se ejecuta en un coLinux Fedora 2.6.22.18.
¿Qué debo hacer para que funcione en Linux?
No es una respuesta a la pregunta, pero relacionado.Recuerde que la definición de la clase de cadena en C++ es 'typedef basic_string string;', por lo que siempre puede hacer una cadena de caracteres sin signo class a la 'typedef basic_string bytestring;'. –
cierto, pero quiero leer un archivo BINARIO – David
.read() y .write() se pueden utilizar para binario/texto, los operadores de flujo << and >> son solo para archivos de texto. Todos los datos en una computadora son en última instancia binarios, es la forma de elegir interpretarlos. – sfossen