我有一个必须发送到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());

最佳答案

如果必须使用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

关于c++ - 用下划线填充空白处,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56360552/

10-11 14:37