LusoRobótica - Robótica em Português
Robótica => Iniciantes => Tópico iniciado por: OxyGen em 13 de Maio de 2010, 15:21
-
Boas a todos...
Já tentei procurar aqui http://www.cplusplus.com/reference/clibrary/ (http://www.cplusplus.com/reference/clibrary/) por uma função que convertesse binário para decimal e vice-versa, mas não encontrei nem uma nem outra... Consegui fazer a função que converte decimal para binário mas não consigo fazer o contrário...
Deixo aqui o que fiz:
unsigned int dec2bin(int dec)
{
int bin=0, i=1;
while(dec!=0)
{
bin+=(dec%2)*i;
dec=dec/2;
i*=10;
}
return bin;
}
Se alguém me pudesse ajudar a fazer a conversão binário para decimal agradecia... Numeros apenas entre 0 e 9.
Cumps
-
http://pt.wikipedia.org/wiki/Convers%C3%A3o_entre_sistemas_num%C3%A9ricos (http://pt.wikipedia.org/wiki/Convers%C3%A3o_entre_sistemas_num%C3%A9ricos)
Será que ajuda?
-
Pois... mas o meu problema é em relação ao código...
unsigned int bin2dec(unsigned int num)
{
char bin[num];
int i = 0;
int j = strlen(bin);
int res =0;
while(i!='\0')
{
res=res + bin[i]*2^j;
i++;
j--;
}
return res;
}
Tento fazer isto e dá-me too many arguments... Já tentei separar o res mas continua na mesma...
-
Mete isto a substituir a tua função, funciona bem para numeros entre 0 e 99:
unsigned int bin2bcd(unsigned int valBin)
{
return ((valBin / 10) << 4) + (valBin % 10);
}
-
É impressão minha ou tu andas na Univ de Aveiro? Existe um guião das práticas de AC2 exactamente com essa função, mas o enunciado era:
Note: A conversão de um valor em hexadecimal para o correspondente em decimal pode ser
efectuada, de forma simplificada (se o resultado for igual ou inferior a 99), do seguinte modo:
-
Sim, isso é do guião de AC2 e sim, sou tambem um ET de aveiro, hex ou binário é o mesmo, por isso essa função serve para o efeito.
-
tente isso, funciona legal até 10 bits no arduino.
int n_decimal = 0;
unsigned int n_binario = 11111111111; // Uso adequado até o número 1023. O limite se dá pela capacitade de armazenamento da variável do arduino, caso contrario bastaria aumentar cont.
void setup() {
Serial.begin(115200);
n_decimal = converte_para_decimal(n_binario);
Serial.print(n_binario);
Serial.print(" ");
Serial.println(n_decimal);
}
int converte_para_decimal(int binario)
{
int decimal = 0;
int decimal_an = 0;
int cont =9; //9 depois estoura
double divisor = 1*(pow(10,cont));
int elevado = 0;
int razao = 0;
for(cont ;cont>=0; cont--){
razao = binario/divisor;
if(binario>=divisor){
if(razao==1){
elevado = pow(2,cont);
decimal = decimal_an+elevado;
decimal_an = decimal;
}
binario = binario-divisor;
}
divisor=divisor/10;
}
return decimal;
}
void loop() {
}
-
Holy zombie thread, Batman!
8 anos tem de ser um record!!!
E com duas divisões num loop deve dar certamente para otimizar