zu teilen Ich versuche, einige Daten von C-Programm nach Golang zu senden. Die Daten werden durch rohe C-Struktur dargestellt. Ich versuche es in Golang zu entlarven.Was ist der beste Weg, Strukturdefinition in C und Golang
Eine Probe wie folgt aus:
typedef struct tagA {
int64_t a;
int64_t b;
char c[1024];
}A;
Ein Verfahren ist es, dieses C struct Golang struct neu zu schreiben. Sprich:
type A struct{
a int64
b int64
c [1024]byte
}
Und dann Rohdaten Byte-Strom umwandeln, um es encoding/binary
verwenden. Aber mit dieser Methode sollte ich zwei verschiedene zusammenhängende Strukturen pflegen.
Ein andere Methode ist Cgo
zu bedienen, einfach die Datei C Sprache Kopf importieren (.h
) enthält diese Struktur, und verwenden Sie C.A
und unsicheren Punkt Rohdaten zu konvertieren C.A. auf struct Aber es ist irgendwie fehlerhaft, und ich bin abgestürzt, um C Char Array in Golang String zu konvertieren.
Was ist Ihre Wahl? Irgendein Vorschlag?
Das ist ein sehr schlechter Ansatz. Definieren Sie ein serielles Datenformat und verwenden Sie die richtige Serialisierung mit Bitshift/Maskierung auf beiden Seiten. Es gibt genügend Fragen und Antworten zu diesem Thema durch eine einfache Suche gefunden werden. – Olaf
Dank @Olaf, beim Ändern der Kapselung Felder, beide Seiten Code Shell geändert werden? Gibt es einen Ansatz zur "Freigabe" Definition an einem Ort? – LiLinZhe
@LiLinZhe, Sie können ein Serialization-Protokoll mit einem Schema verwenden, wie "Protocol Buffers" oder FlatBuffers – JimB