www.mikrocontroller.net

Forum: Compiler & IDEs ein Komma in ein Char nachträglich einfügen


Autor: Kloster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
char XXX_text[4];

Hallo Leute! Im Obigen Char-Feld ist ein dreistelliges Ergebnis einer 
rechenoperation gespeichert in welches ich nachträglich ein Komma 
einfügen will. Wie mache ich das am besten ? (Ich will keine 
Fließkomma-Operationen durchführen.)

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geht nicht direkt. Weil in char XXX_text[4] ein Element zu wenig Platz 
ist: 3 Ziffern + 1 Nullbyte = 4. Mit Komma sind es aber 5 Zeichen.

Was tun? Man kann die drei Ziffern in ein um 1 grösseres Feld umkopieren 
und dabei z.B. zwischen der 1. und der zweiten Ziffer das Komma 
kopieren. Oder je nach Programmablauf, lässt man das Umkopieren sein und 
gibt die Ziffern und das Komma direkt z.B. auf LCD oder UART aus.

Autor: Kloster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort!
genau um das Umkopieren von Bytes innerhalb eines Char ging es mir..in 
Assembler hätte ich einfach das eine oder 2 bytes ausseinandergeschoben 
und ein Komma eingefügt. gibt es in C auch eine Möglichkeit/Befehl Bytes 
in einem Char hin und her zu schieben?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verwechselst du gerade Bytes und Bits?

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach doch das Array einfach etwas größer, damit Platz für das Komma
bleibt:
char XXX_text[5];

Um bspw. das Komma vor die letzte der drei Ziffern zu stellen, machst du
XXX_text[4] = '\0';        // Stringende nach dem 4. Zeichen
XXX_text[3] = XXX_text[2]; // letzte Ziffer eins nach rechts schieben
XXX_text[2] = ',';         // ein Komma an die freie Stelle schreiben

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> genau um das Umkopieren von Bytes innerhalb eines Char ging es
> mir..

In einem char steht nur ein Byte.

> gibt es in C auch eine Möglichkeit/Befehl Bytes in einem Char hin und
> her zu schieben?

Du meinst in einem Array. Es gibt die Funktion memmove.

Autor: Kloster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hall0!
danke für eure Antworten! Der Vorschlag von yalu war genau die Lösung 
meines Problems!
Guten Rutsch ins Neue Jahr allerseits!

Autor: Kloster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zu Stefan B: steht in Jedem Array ein Nullbyte?

ist es das hier?:

XXX_text[4] = '\0';        // Stringende nach dem 4. Zeichen

Autor: Kloster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, Ich habs schon rausgefunden!

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du kannst auch mit dem [4]Array 3 Zahlen + komma + \oByte speichern. 
XXX[0] ist ja schliesslich auch noch ein Char mit nem Byte Platz

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
<°)))o><

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> du kannst auch mit dem [4]Array 3 Zahlen + komma + \oByte speichern.
> XXX[0] ist ja schliesslich auch noch ein Char mit nem Byte Platz

Das ist Quark.


Ein mit

  char Array[4];

deklariertes Array hat genau VIER Elemente:

Array[0] .. Array[3].

Ein Zugriff auf Array[4] ist nicht zulässig.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> XXX[0] ist ja schliesslich auch noch ein Char mit nem Byte Platz

Nö, das ist ein Array mit 0 Elementen, was auch entweder ne Warnung oder 
nen Fehler beim Kompilieren gibt.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>> XXX[0] ist ja schliesslich auch noch ein Char mit nem Byte Platz
>
> Nö, das ist ein Array mit 0 Elementen,

Nein. Es inidizert das erste Element des Arrays. Wie groß das ist, kann 
man an dieser Stelle nicht sagen.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rolf Magnus wrote:
>>>> XXX[0] ist ja schliesslich auch noch ein Char mit nem Byte Platz
>>
>> Nö, das ist ein Array mit 0 Elementen,
>
> Nein. Es inidizert das erste Element des Arrays. Wie groß das ist, kann
> man an dieser Stelle nicht sagen.

char XXX[0];
Ist ein Array mit 0 Elementen. (Und so aufgefasst, passt es auch besser 
in den Kontext des Ursprungsposts).

Zugegeben, das ist nicht genau das, was oben steht. Daran sieht man mal 
wieder, dass man sich doch immer genau ausdrücken sollte.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> char XXX[0];

Das 'char' hast du jetzt dazugedichtet. Vergleiche mit:

>> XXX[0] ist ja schliesslich auch noch ein Char mit nem Byte Platz

> Zugegeben, das ist nicht genau das, was oben steht. Daran sieht
> man mal wieder, dass man sich doch immer genau ausdrücken sollte.

Oder genau lesen ;-)

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.