Avatar billede -els-echelon Nybegynder
26. november 2004 - 16:35 Der er 8 kommentarer og
1 løsning

Binær converter

Øhmmm... En binær converter... Hvordan laver jeg sådan en? (C++)
Den skal gerne kunne konvertere både tal såvel som bogstaver (tegn, generelt)

Jeg er lidt en noob til det her, men jeg er villig til at satse stort på at der er en mulighed hvorpå dette kan lade sig gøre...
Avatar billede arne_v Ekspert
26. november 2004 - 16:39 #1
Hvad vil du have konverteret fra hvilket format og til hvilket format ?
Avatar billede -els-echelon Nybegynder
26. november 2004 - 16:43 #2
- nåe ja! - helt almindelige tekst (eller tal) til binær - altså ikke hexadecimal, eller et eller andet andet.
Muligvis korte sætninger, men bare enkle bogstaver/tal i første omgang (medmindre det er det samme.)
Avatar billede n1ghtmr Nybegynder
26. november 2004 - 16:51 #3
Du dividerer taller med 2 (hvis der er tale om et heltal (int)) indtil tallet = 0; modulos (altså resten) fra hver division afgør om der skal stå 0 eller 1.

Hvis det er selve koden du har problemer med må du lige sige til :)
Avatar billede arne_v Ekspert
26. november 2004 - 16:52 #4
Den her kode kan konvertere fra binær/decimal/hex til binær/decimal/hex:

#include <stdio.h>

int indec()
{
  int res;
  printf("Enter decimal: ");
  scanf("%d",&res);
  return res;
}

int inhex()
{
  int res;
  printf("Enter hexadecimal: ");
  scanf("%X",&res);
  return res;
}

int inbin()
{
  int res,ix;
  char line[34];
  printf("Enter binary: ");
  scanf("%s",line),
  ix=0;
  res = 0;
  while(line[ix]!='\0')
  {
    res = res * 2 + (line[ix]=='1' ? 1 : 0);
    ix++;
  }
  return res;
}

void outdec(int v)
{
  printf("decimal = %d\n",v);
}

void outhex(int v)
{
  printf("hexadecimal = %X\n",v);
}

void outbin(int v)
{
  int i;
  printf("binary = ");
  for(i=0;i<sizeof(int)*8;i++)
  {
      printf("%d",(v >> (sizeof(int)*8 - i - 1)) & 1);
  }
  printf("\n");
}

int main()
{
  int v;
  v = indec();
  outdec(v);
  outhex(v);
  outbin(v);
  v = inhex();
  outdec(v);
  outhex(v);
  outbin(v);
  v = inbin();
  outdec(v);
  outhex(v);
  outbin(v);
  return 0;
}
Avatar billede n1ghtmr Nybegynder
26. november 2004 - 16:54 #5
Lille eksempel:

145 base 2 (binært) = 145 % 2 (rest 1) - 72 % 2 (rest 0) - 36 % 2 (rest 0)... osv
altså 145 (base 10) = 100.. (base 2).


Char er repræsenteret som tal så du kan bare konvertere til int og bruge samme metode.
Avatar billede -els-echelon Nybegynder
26. november 2004 - 16:58 #6
@n1ght, det var mest koden jeg var ude efter. Jeg har nemlig aldrig fattet det system du forklarede ;)

@arne, det ser ud til at virke fint... smider du et svar?
Avatar billede -els-echelon Nybegynder
26. november 2004 - 17:02 #7
Lol, det svar så jeg ikke n1ght - men det gi'r faktisk mening :p - I have been... Enlightened!
Avatar billede arne_v Ekspert
26. november 2004 - 17:03 #8
svar
Avatar billede stormy Nybegynder
27. november 2004 - 09:16 #9
Well - der er lige en lille hale ved det svar som n1ghtmr gav - nemlig at han umiddelbart vender alle sine bits forkert:

145 % 2 = 1
(145/2) = 72 % 2 = 0
(72/2) = 36 % 2 = 0
(36/2) = 18 % 2 = 0
(18/2) = 9 % 2 = 1
(9/2) = 4 % 2 = 0
(4/2) = 2 % 2 = 0
(2/2) = 1 % 2 = 1

145(base 10) er så : 10010001 (base 2)

(og ikke 10001001 - som er den opfattelse man kunne få fra n1ghtmr's kommentar).

- Princippet er rigtigt, der er blot en "ekstra" detalje.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester