Sscanf在Objective-C中等效

Sscanf在Objective-C中等效,第1张

概述我目前正在Objective-C中编写一个wavefront OBJ加载器,我试图找出如何以类似于C中的sscanf()函数的方式解析NSString中的数据. OBJ文件定义顶点,纹理坐标和法线的x,y,z三元组中的面,例如: f 1.43//2.43 1.11//2.33 3.14//0.009 我不关心当前的纹理坐标.在C中,解析这一行的简单方法是声明如下: sscanf(buf, "f % 我目前正在Objective-C中编写一个wavefront OBJ加载器,我试图找出如何以类似于C中的sscanf()函数的方式解析Nsstring中的数据.

OBJ文件定义顶点,纹理坐标和法线的x,y,z三元组中的面,例如:

f 1.43//2.43 1.11//2.33 3.14//0.009

我不关心当前的纹理坐标.在C中,解析这一行的简单方法是声明如下:

sscanf(buf,"f %d//%d %d//%d %d//%d",&temp[0],&temp[1],&temp[2],&temp[3],&temp[4],&temp[5]);

显然,Nsstrings不能在没有首先将它们转换为C风格的字符串的情况下在sscanf()中使用,但我想知道是否有一种更优雅的方式来执行此 *** 作而不进行这样的转换.

解决方法 NSScanner类可以解析字符串中的数字,但它不能用作sscanf的替代品.

编辑:这是使用它的一种方法.您还可以将/放入要跳过的字符列表中.

float temp[6];Nsstring *objContent = @"f 1.43//2.43 1.11//2.33 3.14//0.009";NSScanner *obJscanner = [NSScanner scannerWithString:objContent];// Skip the first character.[obJscanner scanString:@"f " intoString:nil];// Read the numbers.NSInteger index=0;BOol parsed=YES;while ((index<6)&&(parsed)){    parsed=[obJscanner scanfloat:&temp[index]];    // Skip the slashes.    [obJscanner scanString:@"//" intoString:nil];    NSLog(@"Parsed %f",temp[index]);    index++;}
总结

以上是内存溢出为你收集整理的Sscanf在Objective-C中等效全部内容,希望文章能够帮你解决Sscanf在Objective-C中等效所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1024370.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存