我对下面代码的问题是,我在哪里使用了 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);
}
最佳答案
我不确定,但我认为您正在谈论一个 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 ]
。
关于c - 在 C 中格式化 SprintF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16255962/