2009-04-10 15 views
2

Ich versuche etwas mit PHP zur seriellen Schnittstelle (r232) zu schicken. Ich verwende diese Klasse: http://www.phpclasses.org/browse/package/3679.htmlNicht-ASCII-Zeichen in PHP?

Das Problem ist, dass ich nur 1 Byte senden darf. Aber wenn ich etwas wie "1" sende, sende ich tatsächlich 49 (ASCII für 1). Anstatt send ("1"), habe ich mit send (1) versucht, aber es ist nicht gut, denn das ist eine Ganzzahl, die 2 Bytes hat. Also gibt es eine Möglichkeit, ein "echtes" Zeichen, nicht ASCII-Äquivalent zu senden?

+0

Ich habe das Gefühl, PHP könnte nicht die beste Sprache dafür sein, ich habe ein wenig Nachforschungen angestellt und habe nichts gefunden. – Ross

+0

Es gibt keinen "echten Charakter". Computer verstehen nur 0 und 1, nicht "A", "B" oder "C". (Bitte lesen Sie den ersten Teil von [Joel Spolskys netter, aber viel zu langer Unicode-Artikel] (http://www.joelonsoftware.com/articles/Unicode.html). Er erklärt die Zeichensätze sehr detailliert.) –

Antwort

4

Die Funktion gibt ein Zeichen zurück, das durch die ganze Zahl für das entsprechende ASCII-Zeichen angegeben wird.

+0

Es gibt a zurück Charakter, aber als PHP-String. Das hilft dem OP nicht –

+0

Nimmt die Bibliothek keine PHP-Zeichenfolge? Es übergibt es in fwrite ... – Mark

+0

Um genauer zu sein: 'chr' verwandelt eine ganze Zahl in ein Byte. – Gumbo

0

Es sieht so aus, als erwarte die Bibliothek Zeichen als Eingabe. Wenn Sie das Zeichen senden müssen, das zu 0x01 kodieren würde, senden Sie einfach "\ 001". Die Funktion chr() würde Zeichen in ganzzahlige Werte umwandeln und wäre hier nicht sinnvoll.

Noch eine Sache: Die Byte-Größe von ganzen Zahlen hängt vom zugrunde liegenden System ab und ist meistens 4 Bytes.

+0

Nicht so. ord() konvertiert Zeichen in ganzzahlige Werte und chr() macht das Gegenteil. – Mark

0

Ich bin mir nicht sicher, was Sie erreichen möchten. Versuchen Sie, die Ganzzahl 1 zu senden? Kennen Sie die Klasse nicht, haben Sie versucht, nur den Wert 1 als Argument anzugeben? Wenn das nicht funktioniert, versuchen Sie, es mit der chr()-Funktion zu umbrechen.