[Info]
Aktuelle Zeit: Mi 18. Okt 2017, 19:32

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Was bedeutet "(uint8_t *)msg" ?
BeitragVerfasst: Di 6. Jun 2017, 12:05 
Offline
Benutzeravatar

Registriert: Fr 24. Jul 2015, 10:13
Beiträge: 239

Schule/Uni/Arbeit: KFZ-Elktr.
Hallo zusammen,

im beigefügten Quelltext-Beispiel ist soweit alles verständlich ausser:

char *msg = "Hallo Welt";// Nachricht

dort wird der Variablen *msg ein text zugewiesen. Was bedeutet das " * " vor "msg" ?

und in der Zeile:

vw_send((uint8_t *)msg, strlen(msg));

Was bedeutet "(uint8_t *)msg" ?

"uint8_t" hat was mit "byte" zu tun aber warum wird hier nur "uint8_t" verwendet ?
Kann mir das jemand kurz erklären oder ein Hinweis geben. In der Referenz habe ich auch
nicht wirklich was gefunden.

Vielen Dank

Code:
// 433 MHz Sender mit der VirtualWire Library  V 1.27
//
// Matthias Busse 17.5.2014 Version 1.0

// Verbindungen zum Uno
// GND > D5
// VCC > D6
// Daten > D7
 
#include <VirtualWire.h>

char *msg = "Hallo Welt";// Nachricht
 
void setup() {
  pinMode(7, OUTPUT);
  pinMode(5, OUTPUT);   // GND 0V
  digitalWrite(5, LOW);
  pinMode(6, OUTPUT);   // VCC 5V
  digitalWrite(6, HIGH);
  vw_setup(5000);       // Bits pro Sekunde
  vw_set_tx_pin(7);     // Datenleitung
}
 
void loop(){
  vw_send((uint8_t *)msg, strlen(msg));
  vw_wait_tx();                         // warten bis alles übertragen ist
  delay(1000);
}


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Was bedeutet "(uint8_t *)msg" ?
BeitragVerfasst: Di 6. Jun 2017, 13:15 
Offline
Wiki-Crew
Benutzeravatar

Registriert: So 3. Feb 2008, 20:35
Beiträge: 1590
Zitat:
char *msg = "Hallo Welt";// Nachricht

dort wird der Variablen *msg ein text zugewiesen. Was bedeutet das " * " vor "msg" ?

Das * vor der variable bedeutet dass die Variable ein Pointer(/Zeiger) ist, sie zeigt nur auf einen Speicherbereich wo in dem Fall "Hallo Welt" drin steht.
http://www.c-howto.de/tutorial-zeiger.html

Zitat:
Was bedeutet "(uint8_t *)msg" ?

Das Ganze ist Type casting, da der Compiler ja denkt das msg vom Typ char * ist und die Funktion anscheinend uint8_t * als Parameter braucht, man sagt dem Compiler in dem Fall dass er die Varibale an der Stelle als einen anderen Typ benutzten soll. (Würde sonst einen Warnung ausgeben)
In dem fall geht das weil char * und uint8_t * gleich groß sind (uint8_t ist nur unsigned)

Gruß

_________________
,___,
[O.o] - orly?
/)__)
-"--"-

[Zensiert.]


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Was bedeutet "(uint8_t *)msg" ?
BeitragVerfasst: Di 6. Jun 2017, 14:20 
Offline
Benutzeravatar

Registriert: Fr 24. Jul 2015, 10:13
Beiträge: 239

Schule/Uni/Arbeit: KFZ-Elktr.
Danke ersteinmal,

dass das " *msg " ein Pointer ist, hab ich mit fast gedacht. Muss man nun das so machen oder kann man "Hello World" nicht in eine einfache Stringvariable schreiben ? Z. Bsp.
string msg = "Hallo Welt";
...
...
vw_send(msg, strlen(msg));

oder verlangt die Funktion vw_send.......; ausdrücklich einen Pointer (was ich vermute :gruebel: )?

Gruss
Ludwig


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Was bedeutet "(uint8_t *)msg" ?
BeitragVerfasst: Di 6. Jun 2017, 21:54 
Offline
Wiki-Crew
Benutzeravatar

Registriert: So 3. Feb 2008, 20:35
Beiträge: 1590
einen "string" gibt es in c nicht, strings nur arrays an bytes.
könnte man auch machen, man muss dann nur die position des ersten bytes an die funktion als pointer übergeben,
Code:
void print(char *p,int length){
  int i;
  for(i=0;i<length;i++)
    printf("%c",p[i]);
  printf("\n");
}

void main(void){
   char msg[] = "hello world";
   int i = strlen(msg);
   print(&msg[0],i);
}
(sollte man allerdings nicht machen, ist nicht schön)

laut referenz ist der parameter ein pointer, als ja, es muss ein pointer zu einem string übergeben werden:
http://www.airspayce.com/mikem/arduino/ ... 66ec3b63b2

_________________
,___,
[O.o] - orly?
/)__)
-"--"-

[Zensiert.]


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Was bedeutet "(uint8_t *)msg" ?
BeitragVerfasst: Mi 7. Jun 2017, 06:49 
Offline
Benutzeravatar

Registriert: Fr 24. Jul 2015, 10:13
Beiträge: 239

Schule/Uni/Arbeit: KFZ-Elktr.
Danke Teslafreak,
jetzt ist einiges klarer


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Gehe zu:  



Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de

moShBox © 2008, 2009, 2010 mosfetkiller-Community