Ziel dieser Function soll sein, das ich den ASCII code von beliebigen
Zeichen (Hier als Beispiel "H") 72 rausbekomme. Zugegeben, dadurch, das
ich mit Zeiger arbeiten muß, sehe ich einfach nur das Problem, das ich
irgendwo einen Fehler bei der Übergabe habe.
Hätte da ggf. jemand 'nen Wind mit der Haustür für mich über???
danke im Vorraus.
Du hast nämlich den pointer auf unsignes short gecastet, nciht aber den
inhalt.
Auch hast du das allokireren des Speichers unnötig kompliziert gemacht.
Geht auch eifnach so:
> Du hast nämlich den pointer auf unsignes short gecastet, nciht aber den> inhalt.
STimmt da war doch noch was. :D danke für die Holzwand
> Auch hast du das allokireren des Speichers unnötig kompliziert gemacht.> Geht auch eifnach so:>
1
>char*zeichen=(char*)malloc(strlen(sValue)+1);
2
>
Hier sage ich auch danke.
und wenn ich nun den Zahlenwert in eine Valiable "x" übertragen will
sollte dies mit
1
intx=(unsignedshort)*test;
thoereitisch laufen?
sry für die wirklich doofen fragen, aber auf sowas wird in meinem Buch,
mit dem ich grad lerne nicht eingegangen
Dies wird zumindest ein Warning (wenn nicht auch einen error)
hervorrufen. Denn ein unsigned short ist kein int. Wenn du ein int haben
willst musst du es auch zu einem int casten:
1
intx=(int)*text;
Da dies aber nicht nötig ist (die standard ASCII zZeichen passen ja in 1
Byte) geht auch:
Albert ... schrieb:> int x = (unsigned short)*test;> Dies wird zumindest ein Warning (wenn nicht auch einen error)> hervorrufen.
Nein. Keins von beiden wird passieren, genausowenig wie bei:
1
intx=*test;
Albert ... schrieb:> Da dies aber nicht nötig ist (die standard ASCII zZeichen passen ja in 1> Byte) geht auch:unsigned short x = (unsigned short) *text;
int ist aber eher üblich. Alle Standardfunktionen, die mit einzelnen
Zeichen arbeiten, nehmen dafür auch int (wie z.B. toupper() oder
isalpha()).
nun rolf, diese funktionen würde ich ja gerne nehmen, wenn diese den für
mich nötigen zweck erfüllen würden.
auf Deutsch gesagt, ich will nur den AscII wert einer "Zeichens"
zurückhaben und dies im
1
unsignedshort
, warum ich gereade auf diesen Typ bestehe??? schau dir einfach die
ASCII tabelle mal an.
Maik Geßner schrieb:> warum ich gereade auf diesen Typ bestehe??? schau dir einfach die> ASCII tabelle mal an.
Dann reicht doch ein char (dafür ist er ja auch gedacht). Und ASCII geht
nur bis 127. Daher reicht es auch wenn char signed ist.
int sollte dem nativen Datentyp vom System entsprechen. Damit arbeitet
der Prozessor am schnellsten.
Wenn du Zeichen in einem Array benutzt dann nimm char, sonst int.
DirkB schrieb:> Wenn du unbedingt unsigned short nehmen willst, dann solltest du printf> das aber auch richtig mitteilen:
nun das sind kleine sachen, welche ich schon lange entsprechend
verändert habe. auch wenn in jedem Forum gesagt wird, das ich mit Char
rechnen kann, rechne ich schon aus gewohnheit mit int und co.
>
die Ausgabe via printf ist nur für Testzwecke gedacht. Beim einbau in
die *.so-file, wird diese so oder so rausfliegen, da von der lib keine
ausgabe in der konsolle stattfinden soll und darf.
> Maik Geßner schrieb:>>> warum ich gereade auf diesen Typ bestehe??? schau dir einfach die>> ASCII tabelle mal an.> Dann reicht doch ein char (dafür ist er ja auch gedacht). Und ASCII geht> nur bis 127. Daher reicht es auch wenn char signed ist.
mir fällt's ehrlichgesagt irgendwo schwer den char als Zeichen und zahl
gleichzeitig zu sehen. dies wiederstreubt sich sich zu 100% meiner
Programmiererfahrung via fpc. noch bescheidener find ich die def. von
char
> int sollte dem nativen Datentyp vom System entsprechen. Damit arbeitet> der Prozessor am schnellsten.> Wenn du Zeichen in einem Array benutzt dann nimm char, sonst int.
wenn ASCII nur bis 127 geht, dann muß ich das mal richtig stellen. in
dem Fall kommt bei mir er erweiterte ASCII zum Einsatz.
Maik Geßner schrieb:> wenn ASCII nur bis 127 geht, dann muß ich das mal richtig stellen. in> dem Fall kommt bei mir er erweiterte ASCII zum Einsatz.
ASCII ist 7 Bit. Was Du mit "erweitertem ASCII" meinst, kann irgendein
8-Bit-Zeichensatz sein, wie CP437, CP850 oder CP1252 (entspricht
weitestgehend ISO 8859-1, "Latin 1").
Wenn Dir char nicht für ein 8-Bit-Zeichen genügt, nimm halt
unsigned char.
Maik Geßner schrieb:> mir fällt's ehrlichgesagt irgendwo schwer den char als Zeichen und zahl> gleichzeitig zu sehen.
Ist auch eher nicht dafür gedacht. char nimmst du, um Zeichen zu
speichern. Zum Rechnen immer explizit signed oder unsigned char oder
halt einen der größeren Integer-Typen.
> dies wiederstreubt sich sich zu 100% meiner Programmiererfahrung via fpc.> noch bescheidener find ich die def. von char
Was soll da "bescheiden" sein? Es ist aus Konsistenzgründen etwas
ungeschickt, daß er nicht wie alle anderen Integer-Typen per Default
signed sein muß, aber wenn man ihn ausschließlich zum Speichern von
Zeichen verwendet, spielt das sowieso keine Rolle.
DirkB schrieb:> Wenn du unbedingt unsigned short nehmen willst, dann solltest du printf> das aber auch richtig mitteilen:> printf("\nMoin : %s == %hu\n", text, (unsigned short)*text);> // ^ hier zeigst du short unsigned.
Das bringt nichts. Das kleinste, was man als Teil einer variablen
Argumentliste übergeben kann, ist sowieso int bzw. unsigned int. Alles,
was kleiner ist, wird zu int "befördert". Das h hat hier keinen weiteren
Effekt.
Davon abgesehen ist es sowieso unsinnig, unsigned short zu verwenden.
Das wird dir für neagtive Werte von *test (so dein char signed ist) auch
noch falsche Werte ausgeben.
Wenn's vorzeichenlos sein soll, caste nach unsigned char:
@rufus. Jopp wird auf die verwendung des CP1252 hinauslaufen.
Hoffe, das der bei Windows/Linux 1 zu 1 ist.
@Rolf zum rechnen verwende ich gennerell nur unsigned short. Größer
brauch ich auch nicht gehen, da ich dem Programm schon sage, das es
einzig und alleine max 11111111 binär nutzen darf. sollte ein Zeichen
doch mal wiedererwartend die 255 überschreiten, muß ich das im
sendeaufruf auf Lazarus schon im vorfeld beachten.
Maik Geßner schrieb:> @Rolf zum rechnen verwende ich gennerell nur unsigned short.
Wie gesagt: In diesem Fall führt es zu einem Fehler, sobald du mal einen
negativen char-Wert bekommst.
> Größer brauch ich auch nicht gehen, da ich dem Programm schon sage, das> es einzig und alleine max 11111111 binär nutzen darf. sollte ein Zeichen> doch mal wiedererwartend die 255 überschreiten, muß ich das im> sendeaufruf auf Lazarus schon im vorfeld beachten.
Was versprichst du dir denn davon, unsigned short zu nehmen? Wie gesagt
wollen die meisten Funktionen sowieso mit int arbeiten, und schneller
ist short auf dem PC auch nicht. Der Default sollte eigentlich an allen
Stellen, an denen man nicht explizit was anderes braucht, int sein.