我發送一個c結構寫入服務器。結構和寫看起來像這樣。C中的未知字節寫入結構
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));
的服務器,在Java中,接收在NIO ByteBuffer
的信息,然後用得到一個ByteBuffer.array
byte[]
。當我檢查byte[]
其內容是:
[ 0] = 1
[ 1] to [50] = 0
[51] = 70
[52] to [55] = 2
[56] to [63] = 3
如果添加了長度可達1 + 50 + 4 + 8你63,但與奇70字節長度爲64
爲什麼70字節在這裏?它與網絡或C結構有關嗎?還有,如果可以的話,如何去除它?
請不要這樣做。你正在尋求一個痛苦的世界。如果您打算使用發送字節流的通道,請準確定義您要交換的字節流。不要說「我會發送任何C結構碰巧是,並希望它發生對另一方有意義」。 –
另外,你是否意識到'memset(&mystruct-> number,'\ 2',sizeof(int32_t));'將變量設置爲0x02020202或十進制'33686018'? –
@WeatherVane是的,這只是我調試它。 – ezPaint