• 0
Sign in to follow this  
gellox

Lendo arquivo Binário (big Endian)

Question

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

Share this post


Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this