Вы не размещаете uint32_t
в массиве uint8_t
s. Вместо этого вы размещаете его в buffer[0]
. Поскольку длина намного больше, будет сохранен только самый низкий 8-байтовый бит. И так как вы вызвали htonl(length)
, самые низкие 8 байтов на самом деле все 0 (по крайней мере, если ваша хост-система использует другой порядок байтов, чем сеть), и это, похоже, здесь).
Если вы действительно хотите использовать первые четыре элемента buffer
, которые будут использоваться для хранения length
, вы должны сообщить компилятору, что они будут повторно интерпретировать их как uint32_t
.
uint32_t length = 1;
uint8_t buffer[5];
(uint32_t&)*buffer = htonl(length);
std::cout << (uint32_t)*buffer << std::endl;
std::cout << htonl(length) << std::endl;
Не то, что это хорошая идея, чтобы сделать, хотя ..
Вы, кажется, не быть инициализации буфера. Почему нет? –
Собственно, я только что понял, вы только инициализируете 'buffer [0]'. –
@Ethan Вместо того, чтобы представлять этот худший код практики, может быть более продуктивным рассказать нам о реальной проблеме, которую вы пытаетесь решить. –