Для школьного проекта, я должен разработать сервер TFTP в C. я должен построить пакет в массиве полукокса, как это:uint16_t в массиве полукокса
2 bytes 2 bytes n bytes
+--------+-----------+--------+
| CODE | Block # | Data |
+--------+-----------+--------+
Вот как я строю этот пакет:
int tftp_make_data(char *buffer, size_t *length, uint16_t block, const char *data, size_t n) {
memset(buffer, 0, *length);
*length = 0;
*(buffer) = DATA;
*length += sizeof(uint16_t);
*(buffer + *length) = block;
*length += sizeof(uint16_t);
memcpy(buffer + *length, data, n);
*length += n;
return 0;
}
Эта функция заполнения buffer
с содержимым пакета и заполнить length
с размером пакета. Это нормально работает, если block
ниже 128. Если он более высокий, чем 128, он становится -128.
Вы можете мне помочь?
'* (буфер + * длина) = блок;' - вы назначая 'uint16_t' к' char' (который, по-видимому, «подписан» на вашей платформе, как и большинство других). Может захотеть переосмыслить это. – WhozCraig
Я использовал массив uint8_t и, похоже, работает. Спасибо :) – Mathieu