Schreiben Sie den 64-Bit-Int-Wert für NSOutputstream
-
15-09-2020 - |
Frage
Ich habe Probleme mit der Kommunikation der Positionskoordinaten an einen Satz von Motoren, die ich im Netzwerk angeschlossen habe.Ich kann eine Zeichenfolge einfach gut senden und einen Text vom Motor zurückrufen, aber ich kann es nicht scheinbar einen int-Wert senden.
Verwenden von NSLOG Ich habe festgestellt, dass der tatsächliche Wert, den ich sende, korrekt ist, aber ich vermute, dass meine Methode, sie über den Ausgangsstrom zu senden, falsch ist.Irgendwelche Ideen?
Mein Code zum Senden eines 64-Bit-Int-Werts:
generasacodicetagpre.Lösung
Nun, Ihre Codes sehen irgendwie lustig aus.Auf jeden Fall, um eine binäre Ganzzahl über das Netzwerk zu senden, müssen Sie die Endness kennen: Der Empfänger erwartet entweder wenig oder große Endanzeigen.
Hier ist der Code für beide:
generasacodicetagpre.Andere Tipps
Sie sehen wahrscheinlich ein Endianness-Problem.Intel CPUs sind Little-Enderian , was bedeutet, dass das am wenigsten signifikante Byte in einem Multi-Byte-Wert zuerst gespeichert wird, das höchstwertige Byte zuletzt.Wenn Sie eine 8-Byte-Nummer aus dem Speicher lesen und in das Netzwerk einsetzen, ohne etwas zu tun, wird die Bytes in dieser Reihenfolge ausgehen.
Die meisten Netzwerkprotokolle (einschließlich aller Internetprotokolle) erwarten Big-Enderian -Daten, sodass das höchstwertige Byte auf dem Netzwerk zuerst und das am wenigsten signifikante Byte zuletzt erscheint.Erwartet Ihr Netzwerkprotokoll das?