Forum: PC-Programmierung [C] uint8_t und spriftf()


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Marten K. (grashalm4)


Bewertung
0 lesenswert
nicht lesenswert
Mahlzeit,
Ich Programmiere einen STM32 Controller in STM CubeIDE. Die Sprache ist 
C.
Welchen Datentyp verwendet ihr für Strings? ich würde uint8_t[] nehmen..

uint8_t s[50];
sprintf(s,"Hallo ");

Wirft mir folgende Warning:
pointer targets in passing argument 1 of 'sprintf' differ in signedness 
[-Wpointer-sign]

was würdet ihr tun? char nehmen?

beste Grüße

von Nicolai H. (buchanan120)


Bewertung
0 lesenswert
nicht lesenswert
https://docs.microsoft.com/de-de/cpp/c-runtime-library/reference/sprintf-sprintf-l-swprintf-swprintf-l-swprintf-l?view=vs-2019

int sprintf(char *buffer, const char *format [argument]...);

Ich nutze üblicherweise char. Steht so auch in der Doku zu sprintf.

von mh (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Marten K. schrieb:
> Welchen Datentyp verwendet ihr für Strings? ich würde uint8_t[] nehmen..

char (ohne signed oder unsigned) für ascii kodierte Texte.

von Felix U. (ubfx)


Bewertung
0 lesenswert
nicht lesenswert
Marten K. schrieb:
> was würdet ihr tun? char nehmen?

Die Frage ist doch: warum willst du uint8_t nehmen?

von Marten K. (grashalm4)


Bewertung
0 lesenswert
nicht lesenswert
weil ich zB eine Methode habe die strings in uint8_t erwartet ...

static void tx_com(uint8_t *tx_buffer, uint16_t len)
{
  HAL_UART_Transmit(&huart2, tx_buffer, len, 1000);
}

könnte ich natürlich abändern, aber HAL_UART_Transmit benötigt auch 
uint8_t :


HAL_StatusTypeDef HAL_UART_Transmit (UART_HandleTypeDef * huart, uint8_t 
* pData, uint16_t Size,
uint32_t Timeout)  [aus : Description of STM32L4/L4+ HAL]

von Rolf M. (rmagnus)


Bewertung
1 lesenswert
nicht lesenswert
Marten K. schrieb:
> weil ich zB eine Methode habe die strings in uint8_t erwartet ...

Die erwartet einen Rohdaten-Puffer. Da ist ein Zeiger auf uint8_t ja 
passend. Es muss ja kein String sein, den du überträgst.
Was man also macht ist, dass man es an der Stelle, wo man die Daten an 
diese Funktion übergibt, umwandelt, wofür in diesem Fall ein Cast 
reicht.
Sprich: Intern für Strings immer char nehmen und dann an der einen 
Stelle, an der man es für die Ausgabe an die Lowlevel-Funktion übergibt, 
wird nach uint8_t gecastet.

: Bearbeitet durch User
von PittyJ (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Rolf M. schrieb:
> Marten K. schrieb:
>> weil ich zB eine Methode habe die strings in uint8_t erwartet ...
>
> Sprich: Intern für Strings immer char nehmen und dann an der einen
> Stelle, an der man es für die Ausgabe an die Lowlevel-Funktion übergibt,
> wird nach uint8_t gecastet.

So mache ich das auch. Ergab bisher die wenigsten Probleme.

von Marten K. (grashalm4)


Bewertung
0 lesenswert
nicht lesenswert
okay, macht sinn.
Wie würdest du dann casten?
    char s[] ="Hallo \r\n";
    tx_com( (uint8_t*)s, sizeof(s));

so ?

von Felix U. (ubfx)


Bewertung
2 lesenswert
nicht lesenswert
Marten K. schrieb:
> okay, macht sinn.
> Wie würdest du dann casten?
>     char s[] ="Hallo \r\n";
>     tx_com( (uint8_t*)s, sizeof(s));
>
> so ?

Der cast ist richtig, statt sizeof() aber strlen() oder sizeof()-1 wenn 
die Größe zur Compilezeit bekannt ist. Das Nullbyte wirst du im 
Allgemeinen nicht mitübertragen wollen.

: Bearbeitet durch User
von Marten K. (grashalm4)


Bewertung
0 lesenswert
nicht lesenswert
habs verstanden, vielen Dank :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.