gellox

Membros
  • Content Count

    7
  • Joined

  • Last visited

Posts posted by gellox


  1. 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


  2. Pessoal imaginem a seguinte situação:

    Possuo um arquivo binário que o seu conteúdo em 1(um) determinado byte ao converter para decimal deveria ser -10.

    Eu consigo ler todos os bytes positivos, porém quando o valor e negativo ele não me retorna o valor exato.

    Já li muito e ouvir falar algo sobre complemento de 2 (dois) e/ou sinal de magnitude.

    Alguém poderia me ajudar ??

    Obrigado


  3. 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");

    }


  4. 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");

    }


  5. 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