/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
konvertering af char til hex
Fra : Christian Dahm


Dato : 10-05-02 14:46

Hej NG

Jeg skal læse fra en seriel port. jeg har et array: "char InBuff[100];" og
jeg skal sammenligne de værdier jeg får ind med en hex værdi. Hvordan gør
jeg det?

Jeg har prøvet bare at caste:

if (InBuff==(char *)0x04)

Virker ikke.

Kan jeg konverterer InBuff til hex og så sammenligne eller omvendt?


Tak

Christian D



 
 
Leo Havmøller (10-05-2002)
Kommentar
Fra : Leo Havmøller


Dato : 10-05-02 15:01

"Christian Dahm" <crda00@kom.auc.dk> wrote in message
news:abgits$s23$1@sunsite.dk...
> Hej NG
>
> Jeg skal læse fra en seriel port. jeg har et array: "char InBuff[100];" og
> jeg skal sammenligne de værdier jeg får ind med en hex værdi. Hvordan gør
> jeg det?
>
> Jeg har prøvet bare at caste:
>
> if (InBuff==(char *)0x04)
>
> Virker ikke.
>
> Kan jeg konverterer InBuff til hex og så sammenligne eller omvendt?
>

Du skal kigge på de enkelte elementer i dit array

for (i=0; i < sizeof(InBuff); i++)
{
if (InBuff[i] == 0x04)
{
// Fundet.
break;
}
}

Leo Havmøller.



Trevor GoodChild (11-05-2002)
Kommentar
Fra : Trevor GoodChild


Dato : 11-05-02 10:47


"Leo Havmøller" <leh@-nospam-rtx.dk> wrote in message
news:3cdbd29e$0$78765$edfadb0f@dspool01.news.tele.dk...
> "Christian Dahm" <crda00@kom.auc.dk> wrote in message
> news:abgits$s23$1@sunsite.dk...
> > Hej NG
> >
> > Jeg skal læse fra en seriel port. jeg har et array: "char InBuff[100];"
og
> > jeg skal sammenligne de værdier jeg får ind med en hex værdi. Hvordan
gør
> > jeg det?
> >
> > Jeg har prøvet bare at caste:
> >
> > if (InBuff==(char *)0x04)
> >
> > Virker ikke.
> >
> > Kan jeg konverterer InBuff til hex og så sammenligne eller omvendt?
> >
>
> Du skal kigge på de enkelte elementer i dit array
>
> for (i=0; i < sizeof(InBuff); i++)
> {
> if (InBuff[i] == 0x04)
> {
> // Fundet.
> break;
> }
> }
>

Man kan da ikke bruge sizeof.. sizeof returnere da kun byte størelsen af det
enekelte elementer.. feks. vil int være 2 i dos, og 4 i windows. kan det
passe at den også laver sizeof på hele arrayet???

Også lige en kommentar til data fra seriel porten. Det hjælper rigtigt
meget, at char er unsigned. altså "unsigned char InBuff[100]". Har haft
samme problem, da jeg i et projekt, skulle læse fra seriel porten, og
sammenligne værdier. Ellers vil jeg give Leo ret.. du skal tjekke hvert
element i dit array. er dog ikke sikker på "sizeof" kan bruges.

Mvh Trevor





Bertel Lund Hansen (11-05-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 11-05-02 11:07

"Trevor GoodChild" <suber_20[FJERN]@hotmail.com> skrev:

>> for (i=0; i < sizeof(InBuff); i++)

>Man kan da ikke bruge sizeof..

Jo, her kan man måske godt. Den returnerer størrelsen af InBuff,
altså her 100 uanset hvor meget der rent faktisk blev benyttet,
men heri ligger der en fejlmulighed.

>sizeof returnere da kun byte størelsen af det enekelte elementer..

Sizeof() er mere kompleks end som så. Men hvis InBuff havde været
erklæret som en charpointer, ville sizeof() have returneret 4
(under Windows). Så det er helt fint at man er opmærksom på om
den bruges rigtigt.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Byrial Jensen (12-05-2002)
Kommentar
Fra : Byrial Jensen


Dato : 12-05-02 01:10

Bertel Lund Hansen <nospam@lundhansen.dk> skrev:
> "Trevor GoodChild" <suber_20[FJERN]@hotmail.com> skrev:
>
>>sizeof returnere da kun byte størelsen af det enekelte elementer..
>
> Sizeof() er mere kompleks end som så.

sizeof-operatoren[1] er ikke særlig kompleks. Den returnerer altid
størrelsen af sin operand målt i bytes[2]. Dette gælder også for
arrays:

int array[25];

size_t totalsize = sizeof array; // hvad det hele fylder
size_t elementsize = sizeof array[0]; // hvad en int fylder
size_t elements = sizeof array/sizeof array[0]; // 25

1) Notationen med parenteser efter navnet bruges normalt kun om
funktioner. sizeof er ikke en funktion, men en operator hvis
operand enten kan være et unært udtryk eller en typeangivelse i
parentes.

2) En byte er her pr. definition det som en char fylder.
"sizeof (char)" skal således altid være 1.

Der er dog en speciel ting at bemærke vedrørende sizeof: Operanden
evalueres ikke, og kan således ikke medføre sideeffekter. Derfor er
programmet herunder korrekt, og giver et måske overraskende
resultat:

$ cat sizeof.c
#include <stddef.h>
#include <stdio.h>

int main()
{
int i = 0;
size_t s = sizeof(i++/0);
printf ("i = %d, s = %zu\n", i, s);
return 0;
}
$ gcc sizeof.c -o sizeof
$ ./sizeof
i = 0, s = 4
$

Søg
Reklame
Statistik
Spørgsmål : 177496
Tips : 31968
Nyheder : 719565
Indlæg : 6408491
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste