-
> [18] west19 (09.10.13 15:33) > где №4,5 байта это то что мы вводим в эви4
Важно в каком порядке эти два байта. Ну допустим так
void __fastcall TForm1::Button1Click(TObject *Sender)
;
} buf;
buf.d1 = 0;
buf.d2 = StrToInt(Edit2->Text);
buf.d3 = StrToInt(Edit3->Text);
buf.d4 = StrToInt(Edit4->Text);
}
А передавать будешь buf.b
-
> [19] west19 (09.10.13 16:40) > 4 байт старший,а 5 младший
Ну можно специально перевернуть при необходимости, здесь не надо.
-
попробывал как ты говришь,вот глянь правильно написал ? http://rghost.ru/49271154прога запускается без ошибок но ничего не отправляет
-
я нашёл в чем у меня была ошибка)
-
но он не отправляет то что мы вводим в последний эдит Не поможешь и тут значение №4,5 байта это то что мы вводим в эдит 3 - и это состоит из двух байт 4 байт старший,а 5 младший
-
Да, там ещё надо добавить в начале
#pragma pack(1)
и перевернуть таки байты старший младший. ну можно и просто в массив писать
unsigned char buf[5];
buf[0] = 0;
buf[1] = StrToInt(Edit2->Text);
buf[2] = StrToInt(Edit3->Text);
unsigned int t = StrToInt(Edit4->Text);
buf[3] = t >> 8;
buf[4] = t & 0xff;
-
спасиб,помог очень
-
Но у меня возник ещё один вопрос: если я ввожу в эдит4 число,которое меньше чем два байта(например ввожу ему 240),то он с него ничего не отсылает, хотя должен отправить старший байт (00) и младший (F0) .Как это исправить?
-
> [0] west19 (08.10.13 15:21) > iKount = sendto(s, tBuf, strlen(tBuf), 0, (sockaddr *) &dest_addr,sizeof(sockaddr_in));
Наверное
strlen(tBuf)
надо заменить на
sizeof(tBuf) / sizeof(tBuf[0])
?
-
нет не помогло...
-
Что за функция sendto? Смотри её правильные параметры в справке.
-
function sendto(s: TSocket; var Buf; len, flags: Integer; var addrto: TSockAddr; tolen: Integer): Integer; Первый параметр данной функции задаёт сокет, который служит для передачи данных. Здесь нужно указать значение, полученное ранее от функции
socket . Параметр Buf задаёт буфер, в котором хранятся данные для отправки, а параметр len — размер этих данных в байтах. Параметр flags позволяет указать некоторые дополнительные опции, которых мы здесь касаться не будем, т.к. в большинстве случаев они не нужны. Пока следует запомнить, что параметр flags в функции sendto , а также в других функциях, где он встречается, должен быть равен нулю. Параметр addrto задает адрес (состоящий из IP-адреса и порта) удаленного сокета, который должен получить эти данные.
-
вот у меня iKount = sendto(s, buf, strlen(buf), 0, (sockaddr *) &dest_addr,sizeof(sockaddr_in));
-
та всёработает норм,но если мне надо с эдита4 отправить 1 байтовое значение,то с него ничего не отправляется отправляется с эдита2 и эдита3,а в эит 4 как будто ничего не вводил,если там число меньше 255
-
Прототип точно скопируй, той функции которой пользуешься в Си++.
-
а чем тееб этот прототип не нравится?
-
я уже и так пробывал buf[0] = 0x10; buf[1] = (int)2*StrToFloat(Edit2->Text); buf[2] = (int)2*StrToFloat(Edit3->Text); buf[3] = ((int)2*StrToFloat(Edit4->Text))/256; buf[4] = (int)2*StrToFloat(Edit4->Text);
-
всё равно не помогло...
-
всё разобрался,спасиб
-
В массив всё правильно сохраняется, можешь по дебагером проверить. Передаёшь неправильно.
|