Mailinglist Archive: opensuse-programming-de (174 mails)

< Previous Next >
Re: scanf()
  • From: Bodo Kaelberer <BodoKaelberer@xxxxxxxxxx>
  • Date: Fri, 16 Jan 2004 16:33:51 +0100
  • Message-id: <13514943526.20040116163351@xxxxxxxxxx>
Hi


> folgende Zeile Code habe ich irgendwo gefunden (ist jetzt egal woher):

Wann sag ich das noch mal immer... (-;


> unsigned char buf[20];
> scanf("%X %X %X", (unsigned int*)buf, (unsigned int*)buf+1, (unsigned int*)buf+2);

> Sinn des Ganzen ist dass eine Zeile der Form "01 23 AB" von Hexziffern
> eingelesen werden soll wobei zwei Hexziffern ein Byte darstellen sollen.

> Es funktioniert nicht und man macht sowas auch nicht unbedingt. Nur
> verstehe ich das Ergebnis nicht ganz, im Speicher steht dann

> buf[0] = FF
> buf[1] = 0
> buf[2] = 0

> Ich könnt's mir eigentlich nur erklären wenn man davon ausgeht dass
> scanf() die Werte von rechts nach links füllt (und das Ganze auf einer
> Little-Endian-Maschine läuft, was ja bei IA32 der Fall ist).

Mir scheint, Du bist Dir etwas uneins. Du hast zwar ein Array of char,
liesst darin aber ints ein.

Bei mir kommt durchaus das, was ich erwarten wuerde. Bei Ausgabe
mittels:

for ( i = 0; i < 20; i++ ) {
printf( "%d ", buf[i] );
}
bekomme ich plausible Werte:

1 0 0 0 35 0 0 0 171 0 0 0 0 1 0 0 1 0 0 0


Bye

P.S: Woher weisst printf eigentlich, ob ich ein char, int oder
sonstwas uebergebe? Also woher weiss es, dass es fuer die Darstellung
nur auf ein Byte zugreifen muss, wo doch %d auch fuer ints verwendbar
ist?

--
1 Bodo Kaelberer
123 http://www.webkind.de/
3
4 Politik ist, wenn viele sich streiten und keiner sich freut.


< Previous Next >
Follow Ups
References