-5

我对下面代码的问题是我在哪里使用了 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);
}
4

1 回答 1

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].

于 2013-04-28T05:00:24.593 回答