Avatar billede brhino Nybegynder
29. maj 2003 - 17:45 Der er 9 kommentarer og
1 løsning

char til int

Hej Eksperter

Jeg lærer aldrig C++ !!! hehe

Nå, men mit problem er følgende (og jeg har læst de andre spørgsmål om emnet uden at det lykkedes for mig):

char navn = "12345678",
int a, b;

    a = (int) navn[0];
    b = (int) navn[1];

Resultet er følgende:

a = '1' og b = '2'

Men jeg vil have resultatet til at blive:

a = '1234' og b = '5678'

Hvad er i vejen ??? Jeg har prøvet med atoi og atol, uden held ...

Hjælp mig :-)
Avatar billede arne_v Ekspert
29. maj 2003 - 17:57 #1
Noget i retning af:

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

int main()
{
  char navn[] = "12345678";
  char tmp[5];
  int a, b;
  strncpy(tmp,navn,4);
  tmp[4]='\0';
  a = atoi(tmp);
  strncpy(tmp,navn+4,4);
  tmp[4]='\0';
  b = atoi(tmp);
  printf("a=%d b=%d\n",a,b);
}
Avatar billede brhino Nybegynder
29. maj 2003 - 18:12 #2
Det er det jeg ikke bryder mig om ved C/C++. Alle disse dødsyge kommandoer som atoi og atol !!! I den hensende er ASM en del lettere.

Nå, men jeg takker for hjælpen
Avatar billede arne_v Ekspert
29. maj 2003 - 18:50 #3
Du kan overveje at investere i en C bog som opremser standard C
funktioenerne.
Avatar billede brhino Nybegynder
29. maj 2003 - 19:28 #4
Jeg har faktisk to C++ bøger ... C++ Programmers Bible og C++ Speciel Edition af Bjarne B.  Den sidst nævnte er ulæselig, alt for teknisk !!! Den første er ok men den forklarer nogle ting LIDT for hurtigt og overfladisk !!!

Forresten, kan jeg ikke få dit eksempel til at virke den retunerer NULL efter atoi(temp) funktionerne. Jeg går ud fra at den skal retunerer værdien af char strengen... I mit tilfælde hhv. 0x31323334 og 0x35363738
Hvorfor mon ???
Avatar billede arne_v Ekspert
29. maj 2003 - 20:01 #5
Det virker hos mig.

Output:

a=1234 b=5678

Har du copy pastet ind ?
Avatar billede arne_v Ekspert
29. maj 2003 - 20:04 #6
Hvis du have 0x31323334 og 0x35363738 så er det faktisk nemmere men
ikke kønnere !

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

int main()
{
  char navn[] = "12345678";
  int a, b;
  a = *((int*)navn);
  b = *((int*)(navn+4));
  printf("a=%08X b=%08X\n",a,b);
}

giver:

a=34333231 b=38373635

(jeg kører på en little endian maskine !)
Avatar billede brhino Nybegynder
29. maj 2003 - 20:14 #7
Det her virker :-) TAK !!!
Avatar billede brhino Nybegynder
29. maj 2003 - 20:35 #8
Jeg har et sidste spørgsmål, hvis du da har tiden ...

Hvad hvis jeg vil gøre det omvendt ???
Jeg mener ligge 0x34333231 over i navn (som jo er char) ??

(int) navn = a

virker ikke. Jeg tror stadig væk jeg har en del problemer med dette mærkelige fænomen char og int som findes i C++.

Håber du kan hjælpe mig !?!?!
Avatar billede arne_v Ekspert
29. maj 2003 - 20:40 #9
Prøv med:

*((int*)navn) = a;
Avatar billede brhino Nybegynder
29. maj 2003 - 20:52 #10
Haha ... Tak !!!

tro det eller lad vær, men faktisk havde jeg prøvet den kommando før jeg skrev mit sidste spørgsmål. Da skrev kompileren en eller anden fejlmeddelese !! Nu da jeg prøvede igen virkede den ... Måske skulle jeg reboote !!

Tak igen.. Det har været en stor hjælp !!
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