Avatar billede Swift Praktikant
11. december 2000 - 13:18 Der er 1 kommentar og
3 løsninger

Konverter fra BINÆR til DECIMAL ??

Jeg vil gerne have en NEM metode at konvertere fra BINÆR til DECMAL tal.

Det må gerne være nogle standard libaries...

BinVar = 01100101
DecVar = ????? - hvordan gøres det ??
Avatar billede james_t_dk Juniormester
11. december 2000 - 13:48 #1
DecVar = StrToInt ( BinVar + \'B\' )
Kunne være et forslag!
Avatar billede lucifer Nybegynder
11. december 2000 - 13:56 #2
Jeg går ud fra at du menet heltal dvs. integer, hvis det er decimaltal (float), så er jeg på herens mark.

Med hensyn til standart lib, så findes de nok. Men jeg kender dem ikke.

Til gengæld, kan du lave en lille fiks algorime
Der kan det samme

(den er skrevet efter java terminolgi - så den skal lige laves om til c++ terminologi)



int bin = BinVar;
int tmp = 1;
int dec = 0;
while(bin >=1)
{
  dec = dec + ((bin%10) * tmp);
  tmp *=2;
  bin = bin /10;
}


dette skal så lige probbes ind i en metode, der modtager den tinnære tal, og returnere heltallet
Avatar billede soepro Nybegynder
13. december 2000 - 12:55 #3
Dine integers indeholder jo rent faktisk binære tal. Du kan meget nemt få dem skrevet ud binært nemlig vha.

cprintf(\"Den binære værdi er = %s\", itoa(BinVar, 2); // <stdlib.h>

mht. assignment kan du enten benytte dig af en funktion svarende til den lucifer beskriver ovenfor, evt. overloaded som nedenfor, eller du kan \"oversætte\" dem til Hex-værdier (dvs. 4 bit ad gangen), f.eks. 10111001 => 1011 = 8+2+1 = B, 1001 = 8+1 = 9 => 0xB9;

int setBin(ulong value)
{
  int tmp = 0;
  while (value > 1)
  {
      tmp = tmp*2 + value % 10;
      value /= 10;
  }
  return tmp;
}
int setBin(char *Value)
{
  return setBin(atol(Value));
}

Hermed kan du initialize din binary variabel vha. setBin(10001001) eller setBin(\"10001110\") som du har lyst. Husk på at int i 16-bit DOS har en max. værdi på 65535.
Avatar billede moykal Nybegynder
13. december 2000 - 13:02 #4
Øh - det kommer lige an på hvilket format dine binære data er i. I standard-biblioteket findes der en template ved navn bitset<>, hvor eneste template-parameter er antal bits. Det virker ganske fint. Den er defineret i headeren bitset (uden .h!)

Lille eksempel:

#include <bitset>
#include <iostream>
#include <string>
#include <exception>
using namespace std;

int main(int argc, char* argv[])
{
    char szBits[32];

    while (true) {
        cout << \"Enter bit-sequence> \";
        cin >> szBits;

        if (!strcmp(\"quit\",szBits)) break;
        if (strlen(szBits) > 32) {
            cerr << \"Error: Only up to 32 bits supported.\" << endl;
            continue;
        }

        try {
            bitset<32> b(szBits);

            cout << \"\\tBits read: \" << b.to_string().c_str() << endl;
            cout << \"\\tValue: \" << b.to_ulong() << endl;
        }
        catch (exception &e) {
            cerr << \"Error occurred: \" << e.what() << endl;
            continue;
        }
        catch (...) {
            cerr << \"Unknown error occurred.\" << endl;
            continue;
        }
    }

    cout << \"Done.\" << endl;

    return 0;
}

Ellers er det i C++ hip som hap, om du opfatter en variabel som en bit-sekvens eller en unsigned long.

moykal
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