Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[c++]Spiegelen

Pagina: 1
Acties:
  • 207 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo,

Ik ben bezig met het schrijven van een c++ programmatje dat een decimale waarde omzet naar een hexadecimale waarden. Dit doe ik via de methode die je ook gewoon kunt doen als je het uit je hoofd wil omzetten, dus met restdeling door 16.
Dit lukt goed, alleen is het resultaat dat ik krijg gespiegeld.
Als ik bv 2F zou moeten krijgen komt op mijn scherm F2.
Ik heb al zitten zoeken op het net en heb informatie gevonden over bitshifting, maar dit lukt niet hellemaal bij mij, kan iemand mij helpen, het resultaat zou dus moeten gespiegeld worden.
http://www.linuxtopia.org...in_c++/Chapter03_045.html

Ik zit te zoeken in de richting van: nadat hij mijn eerste getal afdrukt, de cursor er weer voor zetten en het volgende getallen afdrukken. Ik weet enkel niet hoe ik dat zou moeten doen.

Dit is mijn code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <conio.h>

using namespace std;

void main()
{
    int dec, hex, rest;

    cout << "Geef een decimaal getal in: ";
    cin >> dec;
    cout << "Het getal is hexadecimaal: ";

    while(dec > 0)
    {
        rest = dec%16;            //De rest van de deling bepalen

        if(rest == 15)            //De rest omzetten naar bijhorende hex-code
            cout << "F";
        if(rest == 14)
            cout << "E";
        if(rest == 13)
            cout << "D";
        if(rest == 12)
            cout << "C";
        if(rest == 11)
            cout << "B";
        if(rest == 10)
            cout << "A";
        if(rest < 10)
            cout << rest << 1 ;

        dec = dec/16;          //Het getal maken waarmee we opnieuw gaan delen.
    }

    getch();
}


De methode waarop ik mijn hexadecimale waarde bereken zou ik graag houden. Enkel het afrukken zou gewijzigd mogen worden.

Bedankt

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Waarom niet de meest logische oplossing: stop de getallen in een buffer en voer 'm daarna van achter naar voor aan std::cout.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • DizzyVacation
  • Registratie: November 2006
  • Niet online
Je kunt een integer toch gewoon met printf als hex printen.
http://cplusplus.com/reference/clibrary/cstdio/printf.html

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
code:
1
std::cout << std::hex << some_integer;


String omdraaien moet lukken met std::reverse of std::reverse_copy.

Verwijderd

waarom niet gewoon:

#include <iostream>

using namespace std;

int main( )
{
int dec = 123;

cout << dec << endl;
cout << uppercase << hex << dec << endl;
}

  • Qoning
  • Registratie: September 2007
  • Laatst online: 24-11 20:39
C:
1
2
3
4
5
6
7
8
9
10
11
12
void dec2hex(unsigned int getal) {
    static char hex_string[] = "0123456789abcdef";
    std::cout << hex_string[(getal >> (7 * 4)) & 15]
              << hex_string[(getal >> (6 * 4)) & 15]
              << hex_string[(getal >> (5 * 4)) & 15]
              << hex_string[(getal >> (4 * 4)) & 15]
              << hex_string[(getal >> (3 * 4)) & 15]
              << hex_string[(getal >> (2 * 4)) & 15]
              << hex_string[(getal >>       4) & 15]
              << hex_string[getal              & 15]
              << '\n';
}


Kant en klare redelijk vlotte methode als je 32 bit ints moet printen, eventueel zelf aan te passen voor kleinere ints/unsigned chars ofzo. :)

  • sjongenelen
  • Registratie: Oktober 2004
  • Laatst online: 27-11 08:24
misschien dom van mij ook, kun je m niet gewoon omgedraaid weer in een array stoppen :/

buiten de waarschijnlijk weer efficientere methodes hierboven :)

you had me at EHLO


  • Brahiewahiewa
  • Registratie: Oktober 2001
  • Laatst online: 30-09-2022

Brahiewahiewa

boelkloedig

Verwijderd schreef op donderdag 15 november 2007 @ 22:26:
... Enkel het afrukken zou gewijzigd mogen worden...
:X

QnJhaGlld2FoaWV3YQ==


  • Soultaker
  • Registratie: September 2000
  • Nu online
Je kunt natuurlijk ook gewoon van achteren naar voren printen. Dat werkt bijvoorbeeld zo voor decimale getallen:
C++:
1
2
3
int x = 1234, v = 1;
while (10*v < x) v *= 10;
for ( ; v > 0; v /= 10) cout << (x/v)%10;

Aan jou om de code aan te passen zodat het werkt voor basis 16. Bitshiften is mogelijk in plaats van delen door 16, maar ik denk niet dat dat echt een zinnige optimalisatie op code-nivo is.

Verder twee dingen om over na te denken:
• Wat gaat er mis als x heel groot is (bijvoorbeeld 2.000.000.000) en hoe zou je dat kunnen oplossen? (Er is een elegante oplossing!)
• Wat gebeurt er als x negatief is?

(Praktisch gezien zijn de suggesties om 'm gewoon in een string ofzo te stoppen en die om te draaien met std::reverse net zo zinnig, maar het is wel leerzaam om over alternatieve manieren na te denken.)

[ Voor 15% gewijzigd door Soultaker op 16-11-2007 00:41 ]

Pagina: 1