Servus, Es ist bekannt, dass das Zeichen ‘\0’ am Ende einer Zeichenkette automatisch angehängt wird. Die Frage ist, wie kann man dieses Zeichen wirklich z.B. über die serielle Schnittstelle übertragen? Es geht nicht einfach mit
1 | |
MfG Senmeis
|
Anzeige
|
'\0' übertragenServus, Es ist bekannt, dass das Zeichen ‘\0’ am Ende einer Zeichenkette automatisch angehängt wird. Die Frage ist, wie kann man dieses Zeichen wirklich z.B. über die serielle Schnittstelle übertragen? Es geht nicht einfach mit
MfG Senmeis
Gast
#1796728
du wirst uns wohl die senderoutine zeigen müssen, dann sie hört im normalfall auf zu senden wenn sie bei einem \0 ankommt. Die Zuweisung von den char* hilft uns wenig. Die Lösung wird, wie schon angesprochen, in der Senderoutine liegen. Die andere Zutat zur Lösung besteht darin, zu akzeptieren, dass man mit der Forderung das \0 Zeichen (welches in C ja in diesem Sinne kein gültiges Zeichen mehr ist) die Domäne der Strings verlässt und von Stringverarbeitung eine Stufe tiefer geht und einfach nur noch Bytes durch die Gegend schickt. Dass diese Bytes zufällig darstellbare ASCII Zeichen sind, ist zwar nett, darf aber nicht mehr im Sinne von Strings ausgenutzt werden.
Gast
#1800584
Ich weis nicht mit welcher Programmierumgebung du programmierst. Aber unter Visual Studio habe ich da ein nettes Struct, in dem man alle möglichen Einstellungen vornehmen kann. Unter anderem gibt es auch eine Variable in diesem Struct, mit der man sagt, dass die 0 mitgesendet werden soll. Schau dir einmal folgende Seite an: http://msdn.microsoft.com/en-us/library/aa363436%28VS.85%29.aspx Wenn ich mich richtig erinnere, wird über die Variable fNull im verwendeten Struct das Senden und Empfangen von Binär 0 gesteuert. http://msdn.microsoft.com/en-us/library/aa363214%28v=VS.85%29.aspx In deinem Fall musst du fNull = FALSE setzen. Wenn du mit Visual Studio programmierst, solltest du _T("") anstatt "" bei den Strings verwenden, sonst bekommst du Probleme wenn du auf Unicode umstellst.
Gast
#1800600
Barny schrieb: > Schau dir einmal folgende Seite an: > http://msdn.microsoft.com/en-us/library/aa363436%2... > Wenn ich mich richtig erinnere, wird über die Variable fNull im > verwendeten Struct das Senden und Empfangen von Binär 0 gesteuert. > http://msdn.microsoft.com/en-us/library/aa363214%2... Falsch, das gilt nur beim Empfang, ist eine Spezialität von M$ und außerdem defaultmäßig sowieso ausgeschaltet. Barny schrieb: > Wenn du mit Visual Studio programmierst, solltest du _T("") anstatt "" > bei den Strings verwenden, sonst bekommst du Probleme wenn du auf > Unicode umstellst. > Nein, das sollte man mit Strings, die über die serielle Schnittstelle übertragen werden definitiv nicht tun! Sonst bekommst du erst recht Probleme wenn du auf Unicode umstellst. Da sich Senmeis nicht mehr zu Wort meldet, hat er das schwerwiegende Problem wahrscheinlich gelöst. Kleiner Schwank: Im Grunde sollte es ausreichen, sich die Anleitung (manpage) von printf und seinen Abkömmlingen anzusehen. Eventuell hilft sogar ein Blick in das scheinbar in Vergessenheit geratene Buch der Herren Kernighan und Ritchie. In einem Null-terminierten String kann man beliebig viele Nullen unterbringen.
Gast
#1801271
Gerry E. schrieb: > In einem Null-terminierten String kann man beliebig viele Nullen > unterbringen. > Interpretationsfrage :)
Ist das jetzt 1 String oder sind es 2? Der OP hatte aber nicht das Problem die Nullbytes irgenwie in seinen RAM zu bekommen, sondern sie von dort dann über seine serielle Schnittstelle zu übertragen.
Gast
#1801408
Gerry E. schrieb: > In einem Null-terminierten String kann man beliebig viele Nullen > unterbringen. In einem Null-terminierten String markiert die erste Null das Ende des Strings. Also ist per Definition in einem Null-terminierten String immer exakt eine Null enthalten (die aber nicht mehr mit ausgeben wird). Ich denke, er spielte auf printf("das: ->%c<- hier ist ein
NUL-Character\n", 0) an.
Nitpick: Zumindest in POSIX ist das jedoch in Zusammenhang mit printf
nicht erlaubt, da printf nach stdout schreibt, und stdio hat die
Beschränkungen eines Textfiles (also kein '\0' erlaubt). Hätte er oben
statt „man printf“ das von fprintf genommen, wär's ganz korrekt gewesen.
Hc Zimmerer schrieb: > Ich denke, er spielte auf printf("das: ->%c<- hier ist ein > NUL-Character\n", 0) an. > > Nitpick: Zumindest in POSIX ist das jedoch in Zusammenhang mit printf > nicht erlaubt, da printf nach stdout schreibt, und stdio hat die > Beschränkungen eines Textfiles (also kein '\0' erlaubt). Hätte er oben > statt „man printf“ das von fprintf genommen, wär's ganz korrekt gewesen. Genau, Du hast natürlich Recht. Ich hätte auch gleich eine Anleitung beilegen können, wie das mit der NULL geht. Ich hatte ja von "printf und seinen Abkömmlingen" geschrieben. Und wollte damit erreichen, dass der Fragensteller etwas liest. Aber jetzt: WE. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|