在C中格式化SprintF

时间:2013-04-27 19:19:34

标签: c formatting printf

我对下面的代码提出的问题是,我使用了sprintf,我希望它插入格式化的int,因为客户端然后根据char数组获取数据并提取数据。因此,客户端将从接收到的代码中提取[0]和[1]的延迟。其他变量可以从另一位代码发送的[2]和[3]中获取。将它格式化的方式是什么,就像在printf中保存在char []

中一样
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);
}

1 个答案:

答案 0 :(得分: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]中。