Objective c 将NSString转换为4乘4浮点矩阵

Objective c 将NSString转换为4乘4浮点矩阵,objective-c,ios5,xcode4.2,Objective C,Ios5,Xcode4.2,例如,我想知道是否有一种方便的方法或东西可以将NSString更改为浮点数组 我有一个字符串,如下所示: {{-0.528196, -0.567599, -0.631538, 0}, {0.0786662, -0.773265, 0.629184, 0}, {-0.845471, 0.282651, 0.453086, 0}, {0, 0, 0, 1}} 我通过以下方法得到: NSStringFromGLKMatrix4() 我想这样做: float test[4][4] = {{-0.52

例如,我想知道是否有一种方便的方法或东西可以将NSString更改为浮点数组

我有一个字符串,如下所示:

{{-0.528196, -0.567599, -0.631538, 0}, {0.0786662, -0.773265, 0.629184, 0}, {-0.845471, 0.282651, 0.453086, 0}, {0, 0, 0, 1}}
我通过以下方法得到:

NSStringFromGLKMatrix4()
我想这样做:

float test[4][4] = {{-0.528196, -0.567599, -0.631538, 0}, {0.0786662, -0.773265, 0.629184, 0}, {-0.845471, 0.282651, 0.453086, 0}, {0, 0, 0, 1}};

return GLKMatrix4MakeWithArray(*test);

任何帮助都将不胜感激。

使用
组件通过字符串分离来检索数组中的值:
方法
NSString
,然后使用
GLKMatrix4MakeWithArray
方法。

这有点难看,但它应该可以工作:

// your string data
NSString* s = @"{{-0.528196, -0.567599, -0.631538, 0}, {0.0786662, -0.773265, 0.629184, 0}, {-0.845471, 0.282651, 0.453086, 0}, {0, 0, 0, 1}}";

// remove uneccessary characters from string.. 
s = [s stringByReplacingOccurrencesOfString:@"{" withString:@""];
s = [s stringByReplacingOccurrencesOfString:@"}" withString:@""];
s = [s stringByReplacingOccurrencesOfString:@" " withString:@""];

// build an NSArray with string components and convert them to an array of floats
NSArray* array = [s componentsSeparatedByString:@","];
float data[16];
for(int i = 0; i < 16; ++i){
    data[i] = [[array objectAtIndex:i] floatValue];
}

GLKMatrix4 matrix = GLKMatrix4MakeWithArray(data);
//您的字符串数据
NSString*s=@“{-0.528196,-0.567599,-0.631538,0},{0.0786662,-0.773265,0.629184,0},{-0.845471,0.282651,0.453086,0},{0,0,0,1}”;
//从字符串中删除不必要的字符。。
s=[s stringByReplacingOccurrencesOfString:@“{”with string:@”“;
s=[s stringByReplacingOccurrencesOfString:@“}”和字符串:@”“;
s=[s StringByReplacingOfString:@“with String:@]”的发生率;
//使用字符串组件构建NSArray,并将其转换为浮点数组
NSArray*数组=[s组件由字符串分隔:@“,”];
浮动数据[16];
对于(int i=0;i<16;++i){
数据[i]=[[array objectAtIndex:i]floatValue];
}
GLKMatrix4矩阵=GLKMatrix4MakeWithArray(数据);

如果您的目标是iOS 4.0或更高版本,还可以使用
NSRegularExpression
从字符串中提取数字。

显然,好的ole Ansi C。。。sscanf。。。已经失去和遗忘很久了

sscanf(...,"{{%f,%f,%f,%f}, ...",...);

您可以在帖子中查看我的sscanf代码作为补充示例。

使用NSValue,这是Apple为C类型结构和Objective-C对象之间的转换提供的更好的选择

编码

GLKMatrix4 encMatrix = /* your matrix */;
NSValue *encMatrixValue = [NSValue value:&encMatrix withObjCType:@encode(GLKMatrix4)];
GLKMatrix4 decMatrix;
[encMatrixValue getValue:&decMatrix];
解码

GLKMatrix4 encMatrix = /* your matrix */;
NSValue *encMatrixValue = [NSValue value:&encMatrix withObjCType:@encode(GLKMatrix4)];
GLKMatrix4 decMatrix;
[encMatrixValue getValue:&decMatrix];

这比将GLKMatrix转换为NSString再转换回GLKMatrix要干净和稳定得多。

谢谢,请注意,我认为“withstring”上有一个拼写错误,因为我假设您要删除所有这些符号,所以它应该是“。这是不是像sscanf(字符串,{%f,%f,%f,%f},{%f,%f,%f,%f},{%f,%f,%f},{%f,%f,{%f,%f},{%f,%f},{%f,%f},{%f,{%f,},{%f,{%f,},},{%f,{%f,{%f,},},{%f,},{%f,},{%f,数据[2],数据[3],数据[4],数据[5],数据[6],数据[7],数据[8],数据[9],数据[10],数据[11],数据[12],数据[13],数据[14],数据[15])??对事实上,这是正确的。确保您的变量是通过指针传递的,并且您可以检查返回变量以查看是否已解析所有元素。。。即16。您还可以在“%”和“f”说明符之间添加不同的参数来更改分析。有关格式设置的详细信息,请参阅printf手册页。