我对下面的代码提出的问题是,我使用了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);
}
答案 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]
中。