我正在开发一个需要解析日志文件的项目.我正在寻找一个快速的算法,将采取像这样的组消息:
P1的温度为35°F.
P1的温度为40°F.
P3的温度为35F.
记录器停了下来.
记录器开始了.
P1的温度为40°F.
并以printf()的形式提出一些东西:
"The temperature at P%d is %dF.", Int1, Int2"
{(1,35), (1, 40), (3, 35), (1,40)}
Run Code Online (Sandbox Code Playgroud)
该算法需要足够通用以识别消息组中的几乎任何数据负载.
我尝试搜索这种技术,但我甚至不知道要搜索的正确术语.
Apple的字符串格式说明符记录了声明,
NSString格式化方法和CFString格式化函数支持的格式说明符遵循IEEE printf规范 ; ...您也可以将这些格式说明符与NSLog函数一起使用.
但是,尽管printf规范定义%C作为等同于%lc和%S作为等同于%ls只%C和%S看起来与正常工作NSLog和+[NSString stringWithFormat:].
例如,请考虑以下代码:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
unichar str[3];
str[0] = 63743;
str[1] = 33;
str[2] = (unichar)NULL;
NSLog(@"NSLog");
NSLog(@"%%S: %S", str);
NSLog(@"%%ls: %ls", str);
NSLog(@"%%C: %C", str[0]);
NSLog(@"%%lc: %lc", str[0]);
NSLog(@"\n");
NSLog(@"+[NSString stringWithFormat:]");
NSLog(@"%%S: %@", [NSString stringWithFormat:@"%S", str]);
NSLog(@"%%ls: …Run Code Online (Sandbox Code Playgroud) 我一直在寻找Perl内置函数sprintf使用的舍入约定.
我认为它进行了正常的舍入(例如在Java的舍入模式约定中的 ROUND_HALF_UP ),但挖掘进一步证明这是错误的:
> /usr/local/bin/perl5.10.1 -e 'print(sprintf("%.2f", shift @ARGV)."\n");' 0.335
0.34
> /usr/local/bin/perl5.10.1 -e 'print(sprintf("%.2f", shift @ARGV)."\n");' 1.335
1.33
Run Code Online (Sandbox Code Playgroud) 这个非常简单的c程序在使用valgrind运行时会给我一个分段错误.它开始正常时运行良好.将USR1信号发送到进程时会崩溃.
问题似乎是printf处理浮点值格式化的方式,因为如果使用字符串(%s)或int(%d)格式参数,它可以正常工作.
PS我知道你不应该在信号处理程序中调用任何printf系列函数,但仍然为什么它只与valgrind崩溃.
#include <stdio.h>
#include <signal.h>
void sig_usr1(int sig) {
char buf[128];
snprintf(buf, sizeof(buf), "%f", 1.0);
}
int main(int argc, char **argv) {
(void) signal(SIGUSR1, sig_usr1);
while(1);
}
Run Code Online (Sandbox Code Playgroud) 如果我这样做:
void printfloat(float number)
{
printf("%f", number);
}
Run Code Online (Sandbox Code Playgroud)
和
void printdouble(double number)
{
printf("%f", number);
}
Run Code Online (Sandbox Code Playgroud)
每个函数可以输出的最大字符数是多少?
可能重复:
printf中格式说明符%i和%d之间的差异
我只是检查了引用,它说它们都表示有符号整数.我认为必须有一些区别
如何使printf的输出出现在Xcode Organizer控制台视图中?在连接设备上进行调试时,我可以在Xcode的调试控制台中的NSLog输出中看到printf输出,但我只能在Organizer控制台上看到NSLog输出.
我正在开发Objective-C++并使用printf来记录纯c ++代码.最终,我希望从设备断开连接时可以获得应用程序的输出.
我想知道是否有更好的方法在c中打印一组int;
目前我printf("%d" ,.. ) 为数组中的每个int 做了一个.
但是这会导致每个int一个系统调用?(如果我的理解是正确的).
最好将int数组转换为字符串缓冲区,然后在一次调用中打印缓冲区.
如有必要,我可以为它编写代码.
Q1.这是一个好主意还是太麻烦值得呢?
Q2.是否有任何库实现这样的事情.(无论我google什么回到初学者教程打印整数:s)
编辑 之前不知道数组的大小.
int main ()
{
float Num = 3254.4;
printf("%06.4f",Num);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么不打印003254.3999出我的期望,但是3254.3999?
在发布之前我已经完全阅读了这篇文章.