Erro em C ++, o que fazer?: Não foi possível encontrar uma correspondência para Ostream :: Write (Long *, Int não assinado)

StackOverflow https://stackoverflow.com/questions/2492676

  •  21-09-2019
  •  | 
  •  

Pergunta

Estou tentando escrever dados armazenados em um arquivo binário usando o Turbo C ++. Mas isso me mostra um erro

could not find an match for ostream::write(long *, unsigned int)

Eu quero escrever um 4 byte long dados nesse arquivo. Quando tento escrever dados usando o Pointer Char. Ele funciona com sucesso. Mas eu quero armazenar grande valor, por exemplo. 2454545454, que pode ser armazenado em long só.

Eu não sei como converter 1 byte em bit. Eu tenho 1 byte de dados como personagem. Além disso, o que estou tentando fazer é converter 4 chars em longos e armazenar dados nele. E do outro lado, quero reverter isso para recuperar quantos bytes de dados escrevi.

long *lmem;
lmem=new long;
*lmem=Tsize;
fo.write(lmem,sizeof(long));// error occurs here
delete lmem;

Estou implementando a Steganografia e armazenei com sucesso o arquivo TXT na imagem, mas tentando recuperar os dados do arquivo agora.

EDITAR:

Estou usando o Turbo Complier.

Foi útil?

Solução

Lance para um char*

long *lmem;
lmem=new long;
*lmem=Tsize;
fo.write(reinterpret_cast<char*>(lmem),sizeof(long));
delete lmem;

Ou ainda melhor (pois a alocação na pilha é muito mais rápida e menos propensa a erros)

long lmem = Tsize;
fo.write(reinterpret_cast<char*>(&lmem),sizeof(long));

Se Tsize é endereçável e um longo você pode fazer isso:

fo.write(reinterpret_cast<char*>(&Tsize),sizeof(long));

Outras dicas

Eu acredito que escrever leva um char*, não muito*

ostream& write ( const char* s , streamsize n );

http://www.cplusplus.com/reference/iostream/ostream/write/

1)

const long L = Tsize;
fo.write(reinterpret_cast<const char*>(&L),sizeof(L));

Existem vários problemas aqui.

Primeiro, você não precisa criar um novo long Para armazenar o TSIZE. Você pode fazer um ponteiro para o tsize que já tem.

Segundo, o write Call pega um fluxo de bytes. O que você precisa fazer é lançar seu ponteiro para char*.

Assim:

fo.write( static_cast<char*>(&Tsize), sizeof(Tsize) );

Terceiro, escrever um longo como esse é bastante ineficiente. Se você tem uma grande variedade de valores longos que deseja escrever, use uma única chamada de gravação para obter todos eles, como:

fo.write( static_cast<char*>(array), sizeof(*array) * array_count );

Tenho certeza de reinterpret_cast.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top