Я отправляю c-структуру с записью на сервер. Структура и запись выглядят так.Неизвестный байт в C писать 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));
Сервер, в Java, получает информацию в NiO ByteBuffer
, а затем получает byte[]
с ByteBuffer.array
. Когда я анализирую в 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