• 0
Sign in to follow this  
gellox

Conversão de binário para decimal - Big endian

Question

Pessoal, espero que possam me ajudar!

Sou novo na linguagem. Gostaria de saber como faço para ler um arquivo binário, porém só quero começar a ler após 3000 bytes (preciso fazer um skip). O arquivo esta agrupado em grupos de 4 bytes, ou seja tenho que ler de 4 em 4 bytes e fazer o BIG ENDIAN. para depois transformar em decimal. OBS: Arquivo grande 10 GB, tenho que ler sem colocar todo o arquivo na memória.

Desde já, obrigado pela ajuda!

Atenciosamente!

Gellox

Share this post


Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Pessoal, eu peguei grupos de 4 bytes, só que estou fazendo a conversão na hora de imprimir na tela.

o problema é que preciso fazer uma conta antes de imprimir

em shell fiz essa logica abaixo e funcionou, mas vale considerar que as variáveis já haviam sido convertidas para decimal.

em C , gostaria de saber se existe alguma função já pronta para converter as variáveis de binário para decimal. assim farei a conta abaixo.

( a * 256 *256 *256) + (b *256 * 256 ) + (c *256) +d

segue o código imprimindo em tela:

int main ()

{

int a,b,c,d,total;

FILE *fp;

fp = fopen("a.bin", "rb");

if (fp==NULL)

{

printf("Erro ao abrir arquivo!!!\n");

system("pause");

exit(1);

}

fseek(fp, 3000, SEEK_CUR);

while(1)

{

a=fgetc(fp);

b=fgetc(fp);

c=fgetc(fp);

d=fgetc(fp);

if (a==EOF & b==EOF & c==EOF & d==EOF )

break;

printf("%d,%d,%d,%d\n",a,b,c,d);

//getch ();

}

fclose(fp);

system("pause");

}

Edited by gellox

Share this post


Link to post
Share on other sites
  • 0

Pessoal, consegui resolver.. eu estava fazendo confusão.mas segue anexo o código:

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

int main ()

{

int a,b,c,d,num,dec,total;

char e;

FILE *fp;

fp = fopen("arq.bin", "rb");

if (fp==NULL)

{

printf("Erro ao abrir arquivo!!!\n");

system("pause");

exit(1);

}

fseek(fp,3000 , SEEK_CUR);

while(1)

{

a=fgetc(fp);

b=fgetc(fp);

c=fgetc(fp);

d=fgetc(fp);

total=(a * 256 * 256 * 256) + (b * 256 * 256) + (c * 256) + d;

if (a==EOF & b==EOF & c==EOF & d==EOF )

break;

printf("%d,%d,%d,%d,%d\n",a,b,c,d,total);

getch ();

}

fclose(fp);

system("pause");

}

Edited by gellox

Share this post


Link to post
Share on other sites
  • 0

Pessoal, o código que postei abaixo só funciona para números decimais inteiros positivos.

Alguém sabe como fazer para o código exibir números negativos também??

Ele até exibe um valor mas não o valor exato

Obrigado

Edited by gellox

Share this post


Link to post
Share on other sites

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