2013-04-27 3 views
-5

Вопрос, который у меня есть с приведенным ниже кодом, - это то, где я использовал sprintf, я хочу, чтобы он вставлял форматированный int, потому что клиент затем берет данные и вытаскивает данные в соответствии с массивом char. Таким образом, клиент будет получать из полученного кода задержку с [0] и [1]. Если другая переменная может быть взята из [2] и [3], которая отправляется из другого бита кода. Какой способ отформатировать его, как в Printf быть сохранены в полукокса []Форматирование SprintF в C

int sock = *(int*)data->sock; 
int i,startDelay =0; 
char buffer[SEND_MESSAGE_LENGTH]; 
puts("Run Machine Called"); 
for(startDelay=11;startDelay>=0;startDelay--) 
{ 
    printf("Start Delay:%i\n",startDelay); 
    sprintf(buffer,"%2i",startDelay); 
    printf("Send Data - %2i - Start Delay\n",*buffer-'0'); 
    //write_sock(sock,buffer); 
    sleep(1); 
} 
+0

Что? Почему 'sprintf (buf,«% i », 42);' недостаточно хорош (** кроме уязвимости переполнения буфера **)? – 2013-04-27 19:22:24

+0

Если вы хотите, чтобы число 0 дополнялось слева, используйте формат «% 02d» ... но я не очень понимаю вопрос ... –

+0

В основном моему клиенту нужно получать 11 0 каждый раз, когда он читает с сервера , первая 2 будет одной переменной с сервера, вторая - другой переменной и так далее. если я просто положил startDelay в char [], это может быть «9», где мне нужно, чтобы оно было «09», так как ему нужно заполнить 2 слота, это лучше? – Lacko

ответ

0

Я не уверен, но я думаю, что вы говорите про 2 байта (16 бит) целочисленное значение. Если это так, то sprintf не подходит для работы. Вместо этого, вы должны взять целое число и маску и сдвиг для извлечения 16 бит:

buffer[0] = startDelay & 0xFF; // low byte 
buffer[1] = (startDelay >> 8) & 0xFF; // high byte 

Конечно, так как ваши значения меньше, чем 255, старшие байты здесь всегда будут равны нуль, так что упрощается:

buffer[0] = startDelay & 0xFF; 
buffer[1] = 0; 

Это не для меня ясно, что порядок байт должен быть, так что вы, возможно, придется изменить эти и поместить старший байт в buffer[0] и младший байт в buffer[1].

Смежные вопросы