Hola tiwanacote, para empezar, aunque estas abriendo el archvo como binario, deberias utilizar lectura de bloque (read) en lugar de lectura de linea (getline).
Otro problema esta con el operador << sobrecargado que no permite imprimir los valores de tipo char en su equivalente numerico hecadecimal.
Lo mejor seria utilizar printf, que si permite imprimir un char como si fuena un numero en formato hexadecimal.
Te dejo un codigo de ejemplo, para que te des una idea de como hacerlo, probe el codigo y funciona bien con archivos de tamaño pequeño, no se hasta que tamaño de archivo pueda abrir sin dar error, es probable que si el archivo es muy grande deberas cargarlo por partes en lugar de todo para poderlo abrir bien, te quedaria de tarea hacer esa modificacion
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
// Variable que guarda el tamaño del archivo en bytes
unsigned int length;
// Para que printf imprima los valores de forma correcta
// es necesario que el buffer sea unsigned char en lugar de char
unsigned char *buffer;
// Modifica la siguiente linea para abrir otro archivo
char nombre_archivo[] = "unidad.txt";
ifstream archivo(nombre_archivo, ios::binary);
if(archivo.fail())
cout << "Error al abrir el archivo " << nombre_archivo << endl;
else
{
// obtener longitud del archivo
archivo.seekg (0, ios::end);
length = archivo.tellg();
archivo.seekg (0, ios::beg);
// obtener memoria para la variable
buffer = new unsigned char [length];
// leer datos como bloque
archivo.read ((char*)(buffer),length);
archivo.close();
// imprimir cada posicion del buffer como hexadecimal
for (unsigned int i = 0; i < length; i++)
{
// 16 valores por linea, si deseas un numero diferente
// modifica i % 16
if (i % 16 == 0 && i != 0)
printf("\n");
if (buffer[i] < 16)
printf("0%X ", buffer[i]);
else
printf("%X ", buffer[i]);
}
}
return 0;
}
Saludos