我有一个必须发送到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());
答案 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位数字将其截断。例如,如果n
为1234567890
,则输出为123456
。
答案 1 :(得分:0)
如果能够使用标准库,则可以使用其提供的格式化功能。这是一个迷你演示:
id
std :: right使格式向右对齐,std :: setfill将'_'设置为填充字符,而std :: setw则设置所需的宽度。 最好的问候。