我有一个必须发送到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位就将其截断。例如,如果
n
是1234567890
,则输出将是123456
。关于c++ - 用下划线填充空白处,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56360552/