Конвертировать большой объем данных для выравнивания по структуре - PullRequest
0 голосов
/ 12 сентября 2018
char buf[512] = { 0 };

int ret = recv(gSock, buf, 512, 0);

typedef struct _STRUCT {
    int package;
    int version;
    char string[512];
} STRUCT, *PSTRUCT;

PSTRUCT ok;

ok = (PSTRUCT)buf;

Я пытаюсь принять буфер из сокета (Код не здесь, но он работает).Он принимает его и помещает в буфер.Затем я хочу использовать этот buf как структуру STRUCT.Я хочу, чтобы первые 4 байта вошли в первый член, вторые 4 байта во второй член, а затем оставшиеся данные перешли в последний член.Однако это не работает, как я ожидал.Я получаю странные большие цифры, которые я не получаю.

Я ввел 1111111111 (10) и получил следующие результаты:

package = 825307441
version = 825307441
string = 11\n

Я выполнил десятичное преобразование в шестнадцатеричный номер пакета, и оно вернулось как 31313131, чтомои первые 4 1.Так что я не уверен, почему он идет от целого числа, чтобы вернуться к целому числу.Я хочу именно то, что отправляет, чтобы войти в структуру.

1 Ответ

0 голосов
/ 12 сентября 2018

Вам необходимо просмотреть следующие функции:

htonl, htons, ntohl, ntohs - преобразовать значения между порядком байтов хоста и сети.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...