用下划线填充空白处

时间:2019-05-29 12:22:32

标签: c++

我有一个必须发送到PLC的电报,该电报的1个子字符串提供了条形码ID。它有6个空格,从1开始,并且在递增计数。

要使PLC正常工作,我必须在下划线处填满空白点。 F.E。

_____ 1
____22
___333

有没有办法解决这个问题?

我知道我可以用零填充空白,例如:%06d

000001
000022
000333

gLog.LogPrintf(Info, "customerlog", "Storage Out Ready: %02d%02d%02d%s%04d%010d%02d%010d%010d%06d%06d%06d%06d%06d%06d%010d",
        (*inMessage)["sender"].asInt(), (*inMessage)["reciever"].asInt(), (*inMessage)["series"].asInt(), (*inMessage)["type"].asString().c_str(),
        (*inMessage)["command"].asInt(), (*inMessage)["id"].asInt(), (*inMessage)["priority"].asInt(), (*inMessage)["source"].asInt(),
        (*inMessage)["target"].asInt(), (*inMessage)["height"].asInt(), (*inMessage)["width"].asInt(), (*inMessage)["length"].asInt(),
        (*inMessage)["weight"].asInt(), (*inMessage)["status"].asInt(), (*inMessage)["error"].asInt(), (*inMessage)["data"].asInt());
        gLog.LogPrintf(Info, "Barcode ID: ", (*inMessage)["id"].asCString());
        gLog.LogPrintf(Info, "error: ", (*inMessage)["error"].asInt());

2 个答案:

答案 0 :(得分:1)

如果必须采用C语言,则可以like this

#include <iostream>

int main()
{
  const char *padding = "______";
  int n = 123;
  char buf[7];
  int len;
  len = snprintf(buf, 7, "%d", n);
  printf("%.*s%s", 6 - std::min(6, len), padding, buf);
}

输出:

___123

如果该数字多于6位数字,则仅采用最左边的6位数字将其截断。例如,如果n1234567890,则输出为123456

答案 1 :(得分:0)

如果能够使用标准库,则可以使用其提供的格式化功能。这是一个迷你演示:

id

std :: right使格式向右对齐,std :: setfill将'_'设置为填充字符,而std :: setw则设置所需的宽度。 最好的问候。