c - 在 C 中格式化 SprintF

标签 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);
}

最佳答案

我不确定,但我认为您正在谈论一个 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/

相关文章:

C 递归 Collat​​z 猜想,直到值小于原始整数

visual-studio - 使用标准格式将 Visual Studio 复制/粘贴到 Outlook 中?

安卓/SQLite : Saving/Retrieving data of type REAL

linux - AWK:打印 "print $0"时保留格式

perl - 如何在 Perl 中从 printf 呈现未定义的值?

c - 使用 GSL 的未知类型名称

c - 哪个文件应包含我的 c 项目中的库?

iphone - 理解 Objective-C 中的@Protocols

r - R 中 sprintf 函数的帮助

c - 类型 'char *' 但参数的类型为 'char' 并且数据未打印到文件