Forum: Mikrocontroller und Digitale Elektronik char zu unsigned char konvertieren


von Chris (Gast)


Lesenswert?

Hallo Leute,

folgendes Problem ich arbeite mit Profilab- Expert und muss dort eine 
eigene kleine DLL Programmieren in dem Beispiel, das mitgeliefert wurde, 
das mit dem Borland Compilert compiliert wurde steht es so:

void _stdcall GetInputName(unsigned char Channel, unsigned char *Name)
{
  if (Channel == 0)
    strcpy(Name, "CLK"); //Name input 0
  else
                strcpy(Name, "RST"); //Name input 1
}

habt ihr eine Idee was ich machen muss damit es läuft?

P.S. ich verwende den GCC bzw. Microsoft Compiler

Danke schonmal für die Hilfe Chris

von Rahul, der Trollige (Gast)


Lesenswert?

Und wo ist das Problem? (ich sehe keins)

von Roland R. (roland) Benutzerseite


Lesenswert?

Wahrscheinlich so:
    strcpy((char*) Name, "RST");

Gruß,
Roland

von Chris (Gast)


Lesenswert?

Hallo Roland, vielen Dank für die richtige und schnelle Antwort, aber 
kannst du mir noch kurz sagen warum das so sein muss und nicht einfach 
strcpy((unsigned char*) Name, "RST");?

von Karl H. (kbuchegg)


Lesenswert?

weil strcpy() nun mal einen char* als erstes Argument
haben will.

Da hast keine char*, du hast einen unsigned char*.
Da aber bekannt ist, dass char und unsigned char auf
Bitebene kompatibel sind, und es in diesem Fall keinen
Unterschied macht ob unsigned oder nicht, kann man den
Pointer gefahrlos zurechtcasten: Man überstimmt praktisch
den Compiler und teilt ihm mit: Die Datentypen stimmen
zwar nicht 100% zusammen, aber das passt schon.

von Roland R. (roland) Benutzerseite


Lesenswert?

Zu den Ausführungen von Karl Heinz möchte ich noch folgendes 
hinzuzufügen:

So etwas wie
    (Typ2) (Ausdruck1)
konvertiert Ausdruck 1 vom Typ 1 in einen Ausdruck vom Typ 2.

Da das Argument Name bereits vom Typ unsigned char* ist, strcpy() jedoch 
ein Argument vom Typ char* erwartet, wandelt man Name mittels
    (char*) Name
in den gewünschten Typ um.

Für Strings ist es unerheblich, ob sie als char* oder unsigend char* 
behandelt werden. Der Unterschied spielt nur beim numerischen Vergleich 
der einzelnen Bytes bzw. Buchstaben eine Rolle.

Persönlich halte ich es so, dass ich unsigned char* (bzw. auf dem AVR 
uint8_t*) für Rohdaten irgendeiner Art nehme, und char* für Strings.

Gruß,
Roland

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.