Как конвертировать int в char * (строку) в C ++? - PullRequest
0 голосов
/ 19 августа 2010

SOCKET lhSocket; int iResult; lhSocket = сокет (AF_INET, SOCK_STREAM, IPPROTO_TCP); char * sendbuf = "это тест"; iResult = send (lhSocket, sendbuf, (int) strlen (sendbuf), 0);

printf("Bytes Sent: %ld\n", iResult);

У меня есть клиентская и серверная программа, использующая сокеты на C ++, теперь я отправляю буфер, который он получает сервером, теперь, когда сервер подтверждает, что я получил обратно, говоря, что я получил ваш пакет, я должен получить его в формате строки, а не в байтах: что-то. как этого добиться?

Мой iresult возвращает мне целочисленное значение, я отправляю сообщение через сокет на сервер, я не хочу печатать его как отправленные байты: 14. Я хочу напечатать сообщение, отправленное в виде строки на сервер. Я имею дело с сокетами. Как я могу добиться этого в C ++

Ответы [ 6 ]

4 голосов
/ 19 августа 2010
stringstream buf;
buf << 12345;
buf.str(); // string("12345")
buf.str().c_str(); // char* "12345"
2 голосов
/ 19 августа 2010

sendbuf - это строка, которую вы отправляете. Напечатайте sendbuf вместо:

printf("Bytes Sent: %s\n", sendbuf);
1 голос
/ 19 августа 2010

Еще одна возможность - повышение :: lexical_cast <>

const int myIntValue = 12345;
const std :: string myStringValue = boost :: lexical_cast (myIntValue);

0 голосов
/ 24 июля 2011

Если вы используете Visual C ++ 2008 или 2010, я думаю, что есть встроенная функция для вашей работы.

что-то вроде itoa (int); преобразует данный int и возвращает символ *

довольно просто

его в stdlib.hlbtw

** убедитесь, что это не одинаково во всех компиляторах или дистрибутивах http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/ вот ссылка для справки

0 голосов
/ 19 августа 2010

Вы спрашиваете разные вещи в заголовке и вашем посте.

Преобразование int в строку в C ++ выполняется с

#include <sstream>
std::ostringstream oss;
oss << some_int;
// do whatever with oss.str()...

, как иллюстрировал Томаш.

Чтобы получить данные из сокета, вам нужно еще раз вызвать recv () или read ().Ваш "отправить" вызов сам не ждет ответа.recv () или read () принимают буферы символьного массива для чтения ответа, но вам нужно будет зацикливать чтение, сколько бы вызовов не возвращалось, пока у вас не будет достаточно ответа для обработки, так как TCP - это то, что называется «поток байтов»протокол, который означает, что вы не гарантированно получите полный пакет, строку, сообщение или что-либо кроме байта за вызов.

Учитывая уровень понимания вашего вопроса, я настоятельно рекомендую вам взглянуть наПримеры программирования сокетов в GNU libC - есть несколько примеров серверов и клиентов - их легко найти через Google.

0 голосов
/ 19 августа 2010

Взгляните на itoa , который преобразует целое число в строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...