gellox Postado Novembro 26, 2013 Denunciar Share Postado Novembro 26, 2013 Olá, pessoal! Estou com um probleminha e espero que possam me ajudar! Estou tentando ler um arquivo em binário, porém sei que o arquivo esta em big endian, meu grande problema é na hora de ler o sinal negativo. fiz um código que funciona para positivo mas não traz o valor correto para negativo, segue o código abaixo e o link do arquivo http://forum.clubedohardware.com.br/attachment.php?attachmentid=95343&d=1385465321: //------------------------------------------------------ #include <stdio.h> #include <stdlib.h> #include <iostream> #include <math.h> FILE *dat; int a,b,c,d,total,pulo,tam; void getch(void) { system("pause"); } int main ( ) { dat=fopen("arquivo.txt", "rb"); if (dat==NULL) { printf("\n"); printf("!!! ERRO !! Verifique se o arquivo de saida não existe, caso exista favor remover ou informar outro nome para o arquivo !!!\n"); getch(); } pulo = 0; printf("informe a literal: "); scanf("%d",&pulo); printf("informe o tamanho da literal: "); scanf("%d",&tam); rewind(dat); fseek(dat,pulo,SEEK_CUR); if (tam==2) { a=fgetc(dat); b=fgetc(dat); printf("primeiro byte = %d,\n",a); printf("segundo byte = %d,\n", B); total=(a * 256) + b; printf("resultado = %d,\n",total); } else if(tam==4) { a=fgetc(dat); b=fgetc(dat); c=fgetc(dat); d=fgetc(dat); printf("primeiro byte = %d,\n",a); printf("segundo byte = %d,\n", B); printf("terceiro byte = %d,\n",c); printf("quarto byte = %d,\n",d); total=(a * 256 * 256 * 256) + (b * 256 * 256) + (c * 256) + d; printf("resultado = %d,\n",total); } else { printf("tamanho invalido\n"); } getch(); } //----------------------------- o que ocorre:informe a literal: 0 informe o tamanho da literal: 4 resultado = 481 //CORRETO informe a literal: 28 informe o tamanho da literal: 2 resultado = 1 //CORRETOinforme a literal: 68 informe o tamanho da literal: 2 resultado = 55536 //ERRADO, VALOR CORRETO = -10000 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
gellox
Olá, pessoal!
Estou com um probleminha e espero que possam me ajudar!
Estou tentando ler um arquivo em binário, porém sei que o arquivo esta em big endian, meu grande problema é na hora de ler o sinal negativo. fiz um código que funciona para positivo mas não traz o valor correto para negativo, segue o código abaixo e o link do arquivo http://forum.clubedohardware.com.br/attachment.php?attachmentid=95343&d=1385465321:
//------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <math.h>
FILE *dat;
int a,b,c,d,total,pulo,tam;
void getch(void)
{
system("pause");
}
int main ( )
{
dat=fopen("arquivo.txt", "rb");
if (dat==NULL)
{
printf("\n");
printf("!!! ERRO !! Verifique se o arquivo de saida não existe, caso exista favor remover ou informar outro nome para o arquivo !!!\n");
getch();
}
pulo = 0;
printf("informe a literal: ");
scanf("%d",&pulo);
printf("informe o tamanho da literal: ");
scanf("%d",&tam);
rewind(dat);
fseek(dat,pulo,SEEK_CUR);
if (tam==2)
{
a=fgetc(dat);
b=fgetc(dat);
printf("primeiro byte = %d,\n",a);
printf("segundo byte = %d,\n", B);
total=(a * 256) + b;
printf("resultado = %d,\n",total);
}
else if(tam==4)
{
a=fgetc(dat);
b=fgetc(dat);
c=fgetc(dat);
d=fgetc(dat);
printf("primeiro byte = %d,\n",a);
printf("segundo byte = %d,\n", B);
printf("terceiro byte = %d,\n",c);
printf("quarto byte = %d,\n",d);
total=(a * 256 * 256 * 256) + (b * 256 * 256) + (c * 256) + d;
printf("resultado = %d,\n",total);
}
else
{
printf("tamanho invalido\n");
}
getch();
}
//-----------------------------
o que ocorre:
informe a literal: 0
informe o tamanho da literal: 4
resultado = 481 //CORRETO
informe a literal: 28
informe o tamanho da literal: 2
resultado = 1 //CORRETO
informe a literal: 68
informe o tamanho da literal: 2
resultado = 55536 //ERRADO, VALOR CORRETO = -10000
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.