Я непрерывно отправляю массивы значений пикселей (160x120) в качестве байтового потока из LabVIEW в C-программу через TCP/IP. Затем я конвертирую байты в значения uint32 и печатаю полученные данные в консольном приложении. Цель здесь состоит в том, что я хочу разделить полученные данные в массивах 1D, поэтому каждый 1D-массив будет состоять из (160x120 = 19200) целых значений, поэтому он представляет собой фрейм. В лучшем случае массив должен собирать каждые 19200 целых чисел полученных данных и отображать их в консольном приложении. Затем тот же массив должен собирать следующие целые числа 19200 и отображать их в консольном приложении и так далее. Я ценю, если кто-нибудь покажет, как это сделать.1D массивы uint32 в C
WSADATA wsa;
SOCKET s , new_socket;
struct sockaddr_in server , client;
int c;
int iResult;
char recvbuf[DEFAULT_BUFLEN];
int recvbuflen = DEFAULT_BUFLEN;
typedef unsigned int uint32_t;
unsigned int i;
size_t len;
uint32_t* p;
uint32_t value;
p = (uint32_t*)((void*)recvbuf);
do
{
iResult = recv(new_socket, recvbuf, recvbuflen, 0);
len = iResult/sizeof(uint32_t);
for(i=0; i < len; i++)
{
value = p[i];
}
printf("%d\n", value);
}
while (iResult > 0);
closesocket(new_socket);
WSACleanup();
return 0;
Я не знаю, имеет ли смысл сбросить содержимое изображения на консоль, но вы должны «printf» каждое значение не только последним. – harper
Если вы отправляете пиксельные значения изображения, почему бы не отобразить изображение? Какой смысл сбрасывать каждый 4 пикселя в виде целого числа? Какой тип данных вашего изображения? – dousin
Minor: Подозреваемый в исключительных случаях 'p [i]' является проблемой, поскольку буфер 'recvbuf' имеет выравнивание' char', но используется с выравниванием 'uint32_t'. Лучше объявить буфер как 'uint32_t recvbuf [tbd]'. Также используйте 'printf ("% "PRIu32" \ n ", value)' или 'printf ("% lu \ n ", (unsigned long) значение)'. – chux