Ich sende eine C-Struktur mit Schreiben an einen Server. Die Struktur und das Schreiben sehen so aus.Unbekanntes Byte in C write struct
typedef struct MyStruct {
uint8_t flag;
char str[50];
int32_t number;
time_t time;
} MyStruct ;
...
// Create mystruct
memset(&mystruct->flag, '\1', sizeof(uint8_t));
memset(&mystruct->str, '\0', sizeof(char) * 50);
memset(&mystruct->number, '\2', sizeof(int32_t));
memset(&mystruct->time, '\3', sizeof(time_t));
write(sockfd, mystruct, sizeof(MyStruct));
Der Server, in Java, erhält die Informationen in einem nio ByteBuffer
und bekommt dann ein byte[]
mit ByteBuffer.array
. Als ich die byte[]
seinen Inhalt untersuchen sind:
[ 0] = 1
[ 1] to [50] = 0
[51] = 70
[52] to [55] = 2
[56] to [63] = 3
Wenn Sie die Längen aufsummieren 1 + 50 + 4 + 8 Sie 63, aber die Länge mit den ungeraden 70 Byte ist 64.
Warum ist die 70 Byte hier? Hat es etwas mit Netzwerken oder Strukturen zu tun? Wie auch, wenn ich kann, loswerden?
Bitte tun Sie das einfach nicht. Du verlangst eine Welt des Schmerzes. Wenn Sie einen Kanal verwenden, der Byteströme sendet, definieren Sie genau, wie viel Bytes Sie austauschen werden. Sage nicht: "Ich werde senden, was auch immer die C struct ist und hoffe, dass es auf der anderen Seite Sinn macht." –
Haben Sie bemerkt, dass 'memset (& mystruct-> number, '\ 2', sizeof (int32_t));' die Variable auf '0x02020202' oder dezimal' 33686018' setzt? –
@ WeatherVane ja, das ist nur ich es zu debuggen. – ezPaint