在我的代码中,当我尝试打印'%'它逃脱的命令行上的字符(即它不会在命令提示符下打印),我相信Json编译器正在转义该字符。
我正在使用Jjun的Cajun - C ++源代码
如何保留'%'字符。下面是我的代码片段和Writter.cpp
代码段:
progVal = mrLdProgress_.fgi.reProgress.progress;
objVd["Progress%"] = json::Number((int)((U32)(progVal)* 100 /0xFFFF));
if(progVal == 0xFFFF)
{
objVd["Status"] =json::String("Completed");
objVd["Estimated Time Left"] = json::String("-");
}
else
{
objVd["Status"] =json::String("In progress");
}
Writter.cpp的代码片段实际上它打印Json" name":" value" :
if(it->name != "My Message" && it->name != "Begin Table" && it->name != "End Table")
{
if(needNewLine){ Writer::putchar(','); Writer::putchar('\n'); needNewLine=false;}
int tabs=m_nTabDepth; while(tabs) { Writer::putchar('\t'); --tabs; } Writer::putchar('"');
if(it->name.c_str()[it->name.length()-1]=='&') it->name = it->name.substr(0,it->name.length()-1);
Writer::printf("%s%s",it->name.c_str(),"\" : ");
Write_i(it->element);
needNewLine=true;
}
int Writer::printf(const char *format, ...)
{
char buff[4096];
char *ptr=buff;
if(!format) return 0;
va_list args;
va_start(args, format);
#ifndef OS_PREBOOT
int ret = vsprintf(buff,format,args);
#else
int ret = print(&ptr,format,args);
#endif
va_end(args);
cache_string(buff);
return ret;
}
字符串" Progress%"在这里是真正的罪魁祸首,只有打印进度才会转出%字符。
我尝试添加控制字符" \"到下面的行
> Writer::printf("%s%s",it->name.c_str(),"\" : ");
以便在命令提示符下打印%符号但我收到编译器错误。
所以请帮我解决这个问题。
当我添加'%\'在上面的语句中它起作用,符号%打印在命令提示符上。
问题的输出:
{
"My Operation":[
{
"Operation Status" : {
"Count of operation" : 0,
"Status" : "Success",
"Description" : "None"
},
"Response Data" : {
"Count Operation Status" : [
{
"Count" : 0,
"Operation" : "INIT",
"Progress" : "-",
"Status" : "Not in progress",
}
]
}
}
]
}
正如您在输出中看到的那样,%%不显示仅显示进度。