Guardar nulos a izquierda y no ha derecha.

Iniciado por Xedrox, 25 Diciembre 2012, 21:52 PM

0 Miembros y 1 Visitante están viendo este tema.

Xedrox

Buenas gente, estoy haciendo un spike (programa de prueba) para guardar en un archivo binario, el contenido de una variable de tipo "long long",por ejemplo supongamos que tenemos el valor "6938217" guardado en esa variable, y lo guardo en un archivo en modo binario, el mismo quedaria asi (visto con el Notepad++):


iÞi[NUL][NUL][NUL][NUL][NUL]


Lo que necesito es que me queda asi:


[NUL][NUL][NUL][NUL][NUL]iÞi


Alguna idea? Gracias!

El programa que genera esto es el siguiente:


#include<iostream>
#include<fstream>
#include<sstream>
#include <stdlib.h>

using namespace std;

int main()
{
    struct transaccion
    {
           long long importe;
    };
   

   
   
    ofstream file;
    file.open("Base.txt",ios::app | ios::binary);
   
    struct transaccion trx;
   
    trx.importe=6938217;
   
    file.write((char *)&trx,sizeof(trx));
   
    file.close();
   
   
    return 0;
       
}


naderST

Pues hacer tu propio método write() que escriba como lo desees.

Xedrox

Por favor explicame como puedo implementar ese metodo, de que forma??

naderST

#3
No me manejo mucho con C++, pero en C una solución sería la siguiente:


#include <stdio.h>

struct transaccion
{
      long long importe;
} trx;

void myfwrite(char * buffer, size_t bytes, FILE *fp) {
   while(bytes)
       fputc(buffer[--bytes],fp);
}

int main(){
   trx.importe = 6938217;
   FILE *fp = fopen("prueba.bin","ab");
   myfwrite(&trx,sizeof(trx),fp);
   fclose(fp);
   return 0;
}



EDIT:

Hice un equivalente en C++, espero te sirva:

Código (cpp) [Seleccionar]

#include <iostream>
#include <fstream>

struct transaccion {
    long long importe;
} trx;

class myofstream : public std::basic_ofstream<char> {
public:
    std::ostream& mywrite(const char* s, std::streamsize n) {
        while(n)
            put(s[--n]);
        return *this;
    }
};

int main() {
    trx.importe=6938217;
    myofstream f;
    f.open("prueba.txt",std::ios::app|std::ios::binary);
    f.mywrite((const char*)&trx,sizeof(trx));
    f.close();
    return 0;
}

lucaslopez0000

Hola . Solo venia a decirte una cosa en el titulo pon si el code es c o c++ , ya que yo programo en C y nunca he tocado c++ ,
así evitamos posibles malentendidos.

En cuanto a tu problema como antes he citado estoy OUT en c++ , no te puedo ayudar , si no lo haria
PD : Dichoso crypt code c++ , yo en C esas cosas las hago con un pequeno bucle y sin usar esa selva de variables de c++ :P

Saludos
La manera mas simple de solucionar los problemas de windows , los virus , el spyware , la basura de microsoft en general

USA LINUX

Xedrox

Hola, genial naderST lo hago con C no hay problema. Tengo otra cosita, sabes como puedo escribir un salto de linea en el archivo? Probe grabando el "\n" pero solo me queda el "LF" y necesito que quede el "CR" y "LF" completo.

naderST