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