Avatar billede phpnewbie Nybegynder
22. november 2001 - 21:39 Der er 18 kommentarer og
1 løsning

Jeg er blank lige nu :D

Efter et par timers coding hvor jeg konverterer tal den ene vej, er jeg gået kold over for den anden..
:D

Lad os sige jeg skal lave tallet 08AB om til 10 talssystemet..

jeg regner med at jeg skal bruge en funktion der henter det et af tallene af gangen og ganger dem ud..
men hvordan og hvilken funktion ??
og jeg kunne forestille mig det skulle lægges i et array ? afhængig af hvilken side begynder i.. (skal max arbejde med 16 bit ;) )
Avatar billede stigc Nybegynder
22. november 2001 - 21:44 #1
splitter det et tal af gangen fra højre side.
Så starter du med et B som du konverter til 11.
Dette ligger du i en sum variable. Næste er A som er 10 som du ganger med 16, da det står på anden plads. Dette ligger du oven i sum vairablen. Dernæst 8 som konverteres til 8 som du ganger med 16*16 ( da det står på treedje plads) og som igen lægges til summen.
Bliv ved indtil der ikke er flere tegn! :)


Avatar billede phpnewbie Nybegynder
23. november 2001 - 08:46 #2
flot flot.. jeg ved godt hvordan man konverterer det selv.. men hvordan skal jeg skrive en funktion der gør det ??

:p
Avatar billede soepro Nybegynder
23. november 2001 - 09:39 #3
Sådan her f.eks.:
#include <string.h>
#include <stdio.h>
#include <conio.h>

int HexToInt(char *buffer)
{
  int tmpInt = 0;
  for (int idx = 0; idx < strlen(buffer); idx++)
  {
    tmpInt *= 16;
    if (buffer[idx] >= \'0\' && buffer[idx] <= \'9\')
      tmpInt += (int)(buffer[idx]-\'0\');
    else
      tmpInt += (int)(10 + buffer[idx]-\'A\'));
  };
  return tmpInt;
}

int main(void)
{
  char *aHexValue = \"08AB\";
  cprintf(\"Værdien %s hex = %d decimalt.\\r\\n\", aHexValue, HexToInt(aHexValue));
  return 0;
}
Avatar billede phpnewbie Nybegynder
23. november 2001 - 09:59 #4
den virkede ikke ...

:(
Avatar billede soepro Nybegynder
23. november 2001 - 10:38 #5
Hvad f..... mener du med den ikke virkede - programmet oversætter meget præcist en hex-værdi til et decimal tal - den gør det overikøbet rigtigt !
Avatar billede soepro Nybegynder
23. november 2001 - 10:48 #6
Især hvis man lige fjerner den ekstra parentes, som copy/paste gav:

#include <string.h>
#include <stdio.h>
#include <conio.h>

int HexToInt(char *buffer)
{
  int tmpInt = 0;
  for (int idx = 0; idx < strlen(buffer); idx++)
  {
    tmpInt *= 16;
    if (buffer[idx] >= \'0\' && buffer[idx] <= \'9\')
      tmpInt += (int)(buffer[idx]-\'0\');
    else
      tmpInt += (int)(10 + buffer[idx]-\'A\'); // Her var en ekstra parentes.
  };
  return tmpInt;
}

int main(void)
{
  char *aHexValue = \"08AB\";
  cprintf(\"Værdien %s hex = %d decimalt.\\r\\n\", aHexValue, HexToInt(aHexValue));
  return 0;
}

Sorry !
Avatar billede phpnewbie Nybegynder
23. november 2001 - 13:03 #7
jeg har brug for at den kan tage imod userinput :D

men den driller lidt med det !

ellers virker koden fint . så tak der
Avatar billede stigc Nybegynder
23. november 2001 - 13:42 #8
phpnewbie  >> FLOT, flot selv. Skal nok lade være med at poste noget i dine tråde mere!
Avatar billede phpnewbie Nybegynder
23. november 2001 - 14:37 #9
tak..

det var godt..

Avatar billede soepro Nybegynder
23. november 2001 - 15:31 #10
int main(int, char* argv[])
{
  cprintf(\"%s Hex = %d decimal.\\r\\n\", argv[1], HexToInt(argv[1]));
  return 0;
}
Avatar billede soepro Nybegynder
23. november 2001 - 15:32 #11
Så kan du kalde programmet med f.eks.

hextoint.exe 08AB
Avatar billede phpnewbie Nybegynder
26. november 2001 - 10:30 #12
ye ok.. men skal bruge det sådan at den prompter useren for det.. ikke at man skal gøre det ved kørslen...

Hvis du kan fixe det får du 50 ekstra points :D
Avatar billede jelzin101 Praktikant
26. november 2001 - 10:34 #13
cin.....
Avatar billede phpnewbie Nybegynder
26. november 2001 - 10:35 #14
ja .. har prøvet cin.. men den kommer med alle mulige errors.. så som size og sådan.. har næsten prøvet alt.. :(((
Avatar billede soepro Nybegynder
26. november 2001 - 10:45 #15
Hvis du kører under DOS, skal du selv lave en ordentlig input-rutine vha. getch() kommandoen:

#include <conio.h>
#include <mem.h>

const int ESC      = 0x1B;
const int ENTER    = 0x0D;
const int BACKSPACE = 0x08;

char * getstr(int maxLen)
{
  static char keyPressed;
  static char tmpStr[128];
  keyPressed = 0x0;
  memset(tmpStr, \'\\x0\', sizeof(tmpStr));

  while (keyPressed != ESC && keyPressed != ENTER)
  {
    switch ((keyPressed = getch())
    {
      case ESC : // Done - abort loop and return nothing.
                break;
      case ENTER : // Done - return string
      case BACKTAB : // Clear last character
                    tmpStr[strlen(tmpStr)-2] = \'\\x0\';
                    putc(BACKTAB);
                    break;
      default      : Normal key.
                    if (strlen(tmpStr) >= maxLen)
                      putch(\'\\a\');
                    else
                    {
                      sprintf(tmpStr+strlen(tmpStr), \"%c\", (char)keyPressed);
                      putch(keyPressed);
                    }
                    break;
    }; // Switch
  }; // Until ESC or ENTER
 
  if (keyPressed == ENTER)
    return tmpStr;
  else
    return NULL;
}

I din main skriver du så noget i stil med:

:
char hexVal[7];
cprintf(\"Indtast det hexadecimale nummmer (max 6 cifre): \");
hexVal = getstr(6);

if (strcmp(hexVal, \"\") != 0)
  cprintf(\"%s Hex = %d decimal.\\r\\n\", hexVal, HexToInt(hexVal));
else
  cputs(\"Intet tal indtastet.\\r\\n\");
:
Avatar billede soepro Nybegynder
26. november 2001 - 10:46 #16
Oops - der mangler en break; efter case ENTER og inden case BACKTAB:

case ENTER : // Done - return string
            break;
case BACKTAB : // Erase last character.
Avatar billede soepro Nybegynder
26. november 2001 - 10:47 #17
phpnewbie >> hvor getstr selvfølgelig kan forfines meget mere - men det er vist en anden opgave.
Avatar billede phpnewbie Nybegynder
26. november 2001 - 10:52 #18
ok .. tak kigger lige på det en gang.. takker mange gange :D

Avatar billede phpnewbie Nybegynder
26. november 2001 - 23:28 #19
jo tak.. funktionen virker perfekt.. og nu har jeg fixet et userinput .. :D

mange tak
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