В настоящее время я пишу FTP-сервер и мне нужно разобрать IP и порт удаленного сервера из входного буфера строки в следующем формате:Linux sscanf функция не заполняет переменную
xxx,xxx,xxx,xxx,yyy,zzz
где:
xxx
обозначает IP-адрес в десятичном октетаyyy
круглая ((номер удаленного порта)/256)zzz
это (удаленный номер порта)% 256
Например: 127,0,0,1,123,64
означает ip = 127.0.0.1
и port = 31552
.
настоящее время я использую sscanf
извлечь следующие поля ввода строкового буфера:
sscanf(str, "%u,%u,%u,%u,%u,%u", ret_ip, &ip[0], &ip[1], &ip[2], &temp1, &temp2) == 6
где:
- ул является входной буфер
- ret_ip имеет тип
uint32_t
- ip's имеют тип
uint32_t
- TEMP1 и temp2 имеют тип
unsigned short int
Пример кода:
#include <stdio.h>
#include <netdb.h>
int main(int argc, char *argv[])
{
uint32_t ip[4];
unsigned short int temp, temp1;
if (sscanf("127,0,0,1,142,214", "%u,%u,%u,%u,%u,%u", &ip[0], &ip[1], &ip[2], &ip[3], &temp, &temp1) == 6)
{
printf("%u : %u", temp, temp1);
}
return (0);
}
Моя проблема заключается в том, что для правильной строки, значение temp1 всегда 0 (ноль), то есть все остальные переменные заполняются в соответствии со строкой, кроме temp1. Буду признателен за любую помощь.
Спасибо за помощь, то% х спецификатор сделал трюк. – dotSK