Avatar billede KlausEC Nybegynder
24. august 2009 - 17:09 Der er 7 kommentarer og
1 løsning

konvertering fra en karakter til en decimal værdi i C.

Hey,

pre-condition:
Jeg har variablen myVar (unsigned short int), som jeg ved indeholder værdien 64 eller 0x40 om man vil (det er min kontrolkarakter - et snabela -  '@').

Jeg vil så gerne sende den via TCPPut, så jeg gør følgende:

TCPPut(sktHTTP, myVar);

Dette virker fint, som sådan. Problemet ligger så i, at jeg gerne vil have vist 64 fremfor et @ ved selve visningen.

Kan jeg ikke manipulere myVar på en måde, så jeg får decimalværdien vist?

Nogle gode idéer? :)
Avatar billede arne_v Ekspert
24. august 2009 - 17:29 #1
cast til int:
  (int)myVar
Avatar billede oddi Nybegynder
25. august 2009 - 08:56 #2
itoa kan også bruges:

/* itoa example */
#include <stdio.h>
#include <stdlib.h>

int main ()
{
  int i;
  char buffer [33];
  printf ("Enter a number: ");
  scanf ("%d",&i);
  itoa (i,buffer,10);
  printf ("decimal: %s\n",buffer);
  itoa (i,buffer,16);
  printf ("hexadecimal: %s\n",buffer);
  itoa (i,buffer,2);
  printf ("binary: %s\n",buffer);
  return 0;
}

se eksempel på: http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/
Avatar billede KlausEC Nybegynder
25. august 2009 - 09:49 #3
1) Type casting til int virker ikke - det giver samme resultat.

2) itoa virker heller ikke, da det ikke er en del af ansi C, så jeg kan slet ikke bruge den...

andre forslag? :D
Avatar billede oddi Nybegynder
25. august 2009 - 09:57 #4
Prøv sprintf():

#include <stdio.h>

int main(void)
{
    char str[33];
    unsigned char var = 0x40;
   
    sprintf(str, "%d", var);
   
    printf("char: %c\n", var);
    printf("string: %s\n", str);
 
    return 0;
}
Avatar billede KlausEC Nybegynder
25. august 2009 - 10:28 #5
Jeg har prøvet sprintf allerede, uden held.

Jeg har dog i mellemtiden fundet ud af noget!

TCPPut funktionen "printer" kun 1 char ad gangen, så ved at teste med:

unsigned char var[] = { '0', '0', '.', '6', '4', '\0' };
TCPPut(sktHTTP, navn[0]);
TCPPut(sktHTTP, navn[1]);
TCPPut(sktHTTP, navn[2]);
TCPPut(sktHTTP, navn[3]);
TCPPut(sktHTTP, navn[4]);

... kan jeg få den til at skrive 00.64 ud, hvilket er korrekt. Så mangler jeg bare at få konverteret min unsigned short int til et unsigned char array... på en eller anden måde :s
Avatar billede KlausEC Nybegynder
25. august 2009 - 10:29 #6
hov, var[] skal hedde navn[] i ovenstående self :P
Avatar billede KlausEC Nybegynder
25. august 2009 - 11:23 #7
jeg har løst det :)

I skal have tak for jeres forslag :)
Avatar billede KlausEC Nybegynder
25. august 2009 - 11:23 #8
svar
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