Как конвертировать int в char / string и наоборот в linux (gcc)? - PullRequest
1 голос
/ 19 июля 2011

Я хочу знать метод преобразования целого числа в char / string и наоборот.

Я уже использовал sprintf (& charvar, "% d", & intvar), но он выдает неправильный вывод,возможно мусор.

я также слышал, что atoi () в gcc имеет ошибки. Ссылка: ошибка GCC atoi

Какой другой метод конвертировать строку / символ обратно вint?

На самом деле я хочу отправить целое число с одного компьютера на другой, используя SOCK_STREAM.

// EDIT: я забыл сказать, что sprintf () выполняет преобразование и возвращает положительное значение.

Ответы [ 5 ]

1 голос
/ 19 июля 2011

Если вы хотите отправить целое число на другой компьютер, вы можете отправить его в виде двоичных данных, просто отправив intvar непосредственно в поток, вам не нужно сначала преобразовывать его в символ. Это только создаст проблемы с знанием длины данных, так как разные значения генерируют разные длины строк.

1 голос
/ 19 июля 2011

Пожалуйста, прочитайте руководство по «sprintf» и «sscanf», и, возможно, вам подходят их более безопасные версии.

1 голос
/ 19 июля 2011

Удалить амперсанд перед intvar:

sprintf(&charvar,"%d",intvar)

Две ноты:

  • Здесь я предполагаю, что &charvar имеет правильный тип, который, вероятно, не является.
  • Даже если это не имеет большого значения, полезно привыкнуть к использованию snprintf вместо sprintf.

Вот пример кода:

int intvar = ...;
char str[16];
snprintf(str, sizeof(str), "%d", intvar);
0 голосов
/ 19 июля 2011

ваш sprintf неправильный. Вы должны написать sprintf (строка, "% d", целое число);Если вы хотите отправить целое число по сети и поэтому хотите преобразовать его в строку, взгляните на htons

с помощью этих функций, вы можете преобразовать целое число в сетевой формат и избежатьразличные проблемы порядка байтов!Если вы просто хотите преобразовать его в байты, вы можете сделать что-то вроде этого:

char buf[4];
memcpy(buf,&integer,4);

Если вы хотите, чтобы ваша строка имела значение типа int, вам следует использовать sprintf.

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

Вы не можете sprintf к переменной. Вам нужен буфер для него, так как возможно несколько цифр и завершающий ноль. Кроме того, аргумент должен быть переменной int, а не ее адресом.

Пример:

char buffer[256];
int i = 42;
sprintf(buffer, "%d", i);

(буфер будет заполнен '4', '2' и завершающим '\ 0').

...