Поскольку ваш массив содержит такие значения, как 65000, которые нельзя отправить одним байтом, разумно предположить, что вы намереваетесь отправлять каждое значение в виде двух байтов.
Учитывая, что значения данных don 'не нужно быть обращенным вообще;скорее только тип указателя (так что вызов send()
будет компилироваться).Так что этого должно быть достаточно:
unsigned short array[10] = {65000, 0, 6000, 15000, 100, 50, 1000, 10, 5000, 2000};
const uint8_t *data = reinterpret_cast<const uint8_t *>(array);
send(data, sizeof(array));
Обратите внимание, что вызов send()
указывает sizeof(array)
, а НЕ sizeof(data)
;поскольку data
является указателем, его размер составляет 4 или 8 байт (в зависимости от архитектуры вашего процессора) и не имеет никакого отношения к количеству байтов данных, которые вы хотите отправить!
Принимающая сторонааналогично:
uint16_t buf[10];
uint8_t len = sizeof(buf);
uint8_t * data = reinterpret_cast<uint8_t *>(buf);
receive(data, &len);
Обратите внимание, что после возврата receive()
, len
будет указывать количество полученных байтов , поэтому число полученных значений uint16_t
будет вдвое меньше:
int numShortsReceived = len/sizeof(uint16_t);
for (int i=0; i<numShortsReceived; i++) printf("Received short #%i = %u\n", i, buf[i]);
Еще одно примечание: приведенный выше код не обрабатывает преобразования с прямым порядком байтов / байтов с обратным порядком байтов.Если вы можете гарантировать, что отправитель и получатель будут работать на процессоре с одинаковым порядком байтов, это не проблема.Если OTOH вам нужен этот код для правильной работы на смешанных процессорах (то есть с отправителем с прямым порядком байтов, отправляющим получателю с прямым порядком байтов, или наоборот), то вы захотите, чтобы ваш код отправки преобразовывал каждый из вашихuint16_t
в сеть / big-endian перед отправкой (через htons()
), а также чтобы ваш принимающий код преобразовал каждый из полученных uint16_t
из сети / big-endian в его локальный порядковый номер (через ntohs()
) после их получения (но прежде чем пытаться использовать их для чего-либо).