• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

klisman

float para hexadecimal

11 mensagens neste tópico

boas pessoal,

alguém me sabe dizer se existe alguma função para converter float para hexadecimal?

já andei à procura na net, mas não encontrei o que pretendia...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tambem podes converter tu nao e muito dificil.

sabes que

0 corresponde a 0

1-1

2-2

...

10- A

11 - B

12 - C

13 - D

14 - e

15 - F

pronto a partir disto e facil.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Francamente, não consigo imaginar a representação hexadecimal de um número de vírgula flutuante.

O máximo que consigo imaginar é separar o número em parte inteira e decimal, converter separadamente, e no fim concatenar com uma vírgula no meio :D

Mas não vás por mim, provavelmente esta ideia está errada.

Respondendo à tua pergunta, não, não existe nenhuma função standard que faça o que pretendes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

http://en.wikipedia.org/wiki/Single_precision

Isto é matéria de matemática computacional / análise numérica.

Um floating point é, como deves saber, um número que numa dada base é representado por uma mantissa e pelo expoente. Em C a base é, claro, 2 e portanto apenas tens que passar mantissa e expoente de base 2 para base 16.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu faria assim:

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[])
{
    union
    {
        float f;
        long int li;
    } var;
    
    printf("Tamanho de float: %d\n", sizeof(float));
    printf("Tamanho de long int: %d\n", sizeof(long int));
    
    printf("Introduza um valor real: ");
    scanf("%f", &var.f);
    printf("O seu valor:\n\t%f\n\t%LX\n", var.f, var.li);

    system("PAUSE");
    return 0;
}

A ideia é vizualizar, em hexadecimal, o conteúdo de uma variável float.

Não sei se é bem isto que estavas a percisar, mas fica aqui a ideia.

Cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim temos de separar o número por sinal, expoente e parte decimal...O problema é a parte decimal, tem de haver alguma função para isso, porque o meu Prof disse-me que isso se fazia com 2 linhas de código...O problema é que ele não diz quais :fartnew2:

Em java há umas funções para tirar cada um dos 3 componentes de um número, mas o resultado não dá bem, já coloquei aqui um post para me ajudarem mas ninguém responde :dontgetit:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já que te recusas a ler a página da wikipedia que te mandei vou experimentar dar-te só o link com a imagem que mostra o que tu queres (e que está no artigo cujo link aqui coloquei):

http://upload.wikimedia.org/wikipedia/commons/d/d2/Float_example.svg

Por acaso não vi, mas não foi de prepósito, desculpa.

Eu a parte teórica sei, à mão consigo fazer, no pc é que nao...

O problema é o seguinte,

na parte decimal cada bit tem um peso,

bit 23 = 1

bit 22 = 0.5

bit 21 = 0.25

bit 20 = 0.125

bit 19 = 0.0625

se a parte decimal for 1,0625 fica 10001xxxxxx....

o meu problema é fazer isso automaticamente....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porque é que estás a complicar? Para mim é muito mais simples converter de binário para hexadecimal já que cada conjunto de 4 bits tem correspondência directa a um algarismo hexadecimal.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porque é que estás a complicar? Para mim é muito mais simples converter de binário para hexadecimal já que cada conjunto de 4 bits tem correspondência directa a um algarismo hexadecimal.

Não estou a complicar, foi me pedido que convertesse float para Hex e isso que eu te disse no comentário anterior, não fui eu que inventei, isso é mesmo assim....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu sei que não estás a inventar (lol). Mas o que estás a fazer é a conversão implícita do binário para o decimal. Aquilo que tens que fazer limita-se a converter binário para hexadecimal:

0000 - 0

0001 - 1

0010 - 2

0011 - 3

...

1010 - A

1011 - B

1100 - C

1101 - D

1110 - E

1111 - F

Portanto pega na representação binária do float e converte-a para hexadecimal.

(Como deves saber, a representação binária pode ser obtida algarismo a algarismo assim:

algarismo a, contando da direita a partir de 0: (variavel>>a & 1)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora