Hallo
Das ist für viele sicher eine leichte Frage - ich weiß es aber trotzdem
nicht. Ich möchte den uint8_t Wert als ASCII-Wert in den char* bekommen.
Also hat der char immer 2 Zeichen: den uint8_t Wert + \0.
Macht man das dann so?
1
uint8_ti=34;
2
chartest[2];
3
test[0]=i;
4
test[1]='\0';
5
char*result=&test;
Ich glaub zwar nicht, dass das stimmt, aber das wäre mein Ansatz.
ja so ist es erstmal drin, aber die frage ist in welcher form es rein
soll.
du willst ja bestimmt das es so drin ist oder?
'3', '4', '\0'
dann merkst du aber schon das man dafür 3 zeichen braucht.
auch das ist sehr böse
char* result = &test;
das result darf man nur verwenden solange man noch im kontext ist wo
test noch gültig ist.
Samuel K. schrieb:> nicht. Ich möchte den uint8_t Wert als ASCII-Wert
Da muss man jetzt nachhaken.
Wenn dein uint8_t Wert 34 ist, welchen Text soll das ergeben?
Soll das "34" sein, oder soll das " sein. Denn der ASCII Code von " ist
34
>
1
>uint8_ti=34;
2
>chartest[2];
3
>test[0]=i;
4
>test[1]='\0';
5
>char*result=&test;
6
>
>> Ich glaub zwar nicht, dass das stimmt, aber das wäre mein Ansatz.
Prinzipiell kann man das so machen. Aber wie gesagt, die Frage ist, ob
das das Ergebnis liefert welches du haben willst.
Hallo
Samuel K. schrieb:> uint8_t i = 34;> char test[2];> test[0] = i;> test[1] = '\0';> char* result = &test;
^hier nicht
<test> ist schon ein Zeiger, der auf den Arrrayanfang zeigt
Für einstellige Zahlen geht das hier:
1
uint8_ti=4;
2
uint8_tresult[2];
3
4
result[0]=i+'0';
5
result[1]='\0';
Für mehrstellige Zahlen:
1
#include<stdlib.h>
2
3
uint8_tBuffer[20];
4
int16_ti=25;
5
itoa(i,Buffer,10);
Benutzung:
itoa(zahl, zielstring, Basis des Zahlensystems);
mfg mf
PS: irgendwo hier im Wiki gab es eine Platzsaprende itoa variante, die
nur Dezimal kann, dafür Codegrößenoptimiert für AVR ist.
Ich möchte das bei 34 der char nicht "34" heißt sondern [mal nach
ASCII Tabelle suchen...] "\"" (warum muss 34 auch grad " sein).
Der ASCII - Zeichensatz geht ja von 0-255 (8bit). Nun sollen alle
Zeichen durchgegangen werden (ASCII-Tabelle:
http://www.torsten-horn.de/techdocs/ascii.htm).
Es geht beim ganzen darum, alle ASCII Werte als Test zu senden.
Peter schrieb:> das result darf man nur verwenden solange man noch im kontext ist wo> test noch gültig ist.
Irgendwie muss ich doch aus dem char-array ein Zeiger machen.
Danach kommt außerdem sofort die Senderoutine.
Samuel K. schrieb:> Ich möchte das bei 34 der char nicht "34" heißt sondern [mal nach> ASCII Tabelle suchen...] "\"" (warum muss 34 auch grad " sein).>> Es geht beim ganzen darum, alle ASCII Werte als Test zu senden.
Dann passt das so. Allerdings ohne den &
Der Name eines Arrays ohne Indizierung degeneriert automatisch zu einem
Pointer auf das erste Array Element.
> Peter schrieb:>> das result darf man nur verwenden solange man noch im kontext ist wo>> test noch gültig ist.>> Irgendwie muss ich doch aus dem char-array ein Zeiger machen.> Danach kommt außerdem sofort die Senderoutine.
Dazu brauchst du aber keinen extra Pointer.
In eine Funktion, die einen Pointer übernimmt, kann man genausgut auch
ein Array reinstopfen. Ein Array degeneriert in diesem Fall automatisch
zu einem Pointer auf sein erstes Element.
Allerdings:
Eine übliche Funktion, die einen String versendet (denn genau das hast
du ja gebaut), stützt sich normalerweise auf eine Funktion, die einen
einzelnen char verschickt. Wenn du diese Funktion benutzt, kannst du dir
den ganzen Aufwand einen String zu bauen überhaupt sparen.
Karl heinz Buchegger schrieb:> Eine übliche Funktion, die einen String versendet (denn genau das hast> du ja gebaut), stützt sich normalerweise auf eine Funktion, die einen> einzelnen char verschickt. Wenn du diese Funktion benutzt, kannst du dir> den ganzen Aufwand einen String zu bauen überhaupt sparen.
Danke, durch dich hab ich meinen Irrtum bemerkt.
Ich habe die ganze Zeit ein const char* gesehen. Jetzt sehe ich das da
eigentlich nur const char* steht. Deswegen kommt auch nur Murks an wenn
ich einen char* sende.
Samuel K. schrieb:> Irgendwie muss ich doch aus dem char-array ein Zeiger machen.
nein, musst du nicht.
hier zum selber probieren:
1
uint8_tbuffer[2];
2
3
buffer[0]=11;
4
buffer[1]=22;
5
6
printf("%d\n"buffer[0]);//liefert 11<newline>
7
8
printf("%d\n"*buffer);//liefert 11<newline>
9
10
printf("%d\n"*(buffer+0));//liefert 11<newline>
11
12
printf("%d\n"buffer[1]);//liefert 22<newline>
13
14
printf("%d\n"*(buffer+1));//liefert 22<newline>
Grund: buffer ist ein Zeiger auf den Arrayanfang, also auf das erste
Element. Mit *buffer bekomme ich den ersten Speicherzelleninhalt meines
Arrays.
mfg mf
Samuel K. schrieb:> const char* steht.
Da steht natürlich const char ohne *.
Jo K. schrieb:> Grund: buffer ist ein Zeiger auf den Arrayanfang, also auf das erste> Element. Mit *buffer bekomme ich den ersten Speicherzelleninhalt meines> Arrays.
Danke, das wusste ich noch nicht.
Samuel K. schrieb:> Jo K. schrieb:>> Grund: buffer ist ein Zeiger auf den Arrayanfang, also auf das erste>> Element. Mit *buffer bekomme ich den ersten Speicherzelleninhalt meines>> Arrays.>> Danke, das wusste ich noch nicht.
Es ist auch etwas missverständlich ausgedrückt.
buffer an sich ist kein Zeiger. buffer ist ein Array.
Aber in bestimmten Situationen degeneiert buffer ohne dein Zutun
automatisch zu einem Zeiger auf das erste Arrayelement. buffer ist
daher kein Zeiger. Aber es verhält sich so, wenn man den Namen des
Arrays in bestimmten Situationen ohne eine Indexoperation benutzt.
zb kann man an einen Pointer einen neuen Wert, eine andere Adresse
zuweisen. An buffer kann man das natürlich nicht.
Immer dann, wenn man sich mit einer extern Deklaration auf ein Array
bezieht, kann man nicht einfach sagen: Och das ist ja eh nur ein
Pointer. etc.
Daher ist die Aussage: Das Array xyz ist eigentlich ein Pointer nur sehr
eingeschränkt gültig. Ein Array ist nun mal kein Pointer und ein Pointer
ist kein Array.
Jo K. schrieb:> Wobei man bei meinem printf-Gefummel die enge Verwandtschaft von Pointer> und Array sieht. Man könnte doch sagen es ist ein konstanter Zeiger. mfg> mf
Nicht wirklich.
Ansonsten nehm ich dich nämlich beim Wort:
a.c
***