从c char []获取目标c nsstring
-
08-07-2019 - |
题
下面的代码。 我试着获得像“a1”,“c4”这样的字符串答案
这就是我所拥有的而不是“a1”:“adresse finale:\ 340} 00 \ 214” 用这个主题:
printf("\nadresse finale: %s",[self convertCGPointToSquareAdress:self.frame.origin]);
方法是:
-(NSString *) convertCGPointToSquareAdress:(CGPoint ) point{
int x= point.x /PIECE_WIDTH;
int y=point.y/PIECE_WIDTH;
char lettreChiffre[2];
//char chiffre;
NSString *squareAdress;
//ascii a=97 , b=98... h=105
for (int i=97; i<105; i++) {
for (int j=8; j>0; j--) {
if(i-97==x && j-1==y ){
NSLog(@"enterrrrrrrrrred if convertCGPointToSquareAdress");
lettreChiffre[0]=i;
lettreChiffre[1]=(char) j;
printf(" lettreChiffre: %s ", lettreChiffre);
NSString *squareAdress=[NSString stringWithFormat:@"%s", lettreChiffre];
break;
}
}
}
return squareAdress;
}
你能帮帮我吗? 提前谢谢。解决方案
我可以在您的代码中看到三个问题:
1。 当你这样做
lettreChiffre[1]=(char) j;
记住 j
是 1
和 8
之间的数字,所以你得到的值是 j <的ASCII字符/ code>,而不是字符
1 ... 8
。你应该使用
lettreChiffre[1]= '0' + j;
2。
lettreChiffre
是一个长度为2的 char
数组,这意味着终端空字符没有空间。这可能会奏效,但可能会给你带来胡言乱语。你应该改为声明
char lettreChiffre[3];
lettreChiffre[2] = '\0';
3。
您正在尝试使用 printf
来打印 NSString
,但这是无法做到的。使用
NSLog(@"adresse finale: %@", mynsstring)
或将 NSString
转换回C字符串:
printf("adresse finale: %s", [mynsstring UTF8String]);
另外,正如@dreamlax所说,你真的不需要循环。我以为你正在做其他事情而遇到了这个麻烦,所以我们并没有真正看到完整的代码。但是,如果这真的是你的整个代码,那么你可以简单地删除@dreamlax建议的循环。
其他提示
循环的目的是什么?你有一个循环,基本上暴力迫使矩阵计算&#8220;方形地址&#8221;。如果 x
大于8,您的方法也将返回未初始化的指针。
您的整个方法可以变得更加简单。
- (NSString *) convertCGPointToSquareAdress:(CGRect) point
{
unsigned int x = point.x / PIECE_WIDTH;
unsigned int y = point.y / PIECE_WIDTH;
// Do some range checking to ensure x and y are valid.
char lettreChiffre[3];
lettreChiffre[0] = 'a' + x;
lettreChiffre[1] = '1' + y;
lettreChiffre[2] = '\0';
return [NSString stringWithCString:letterChiffre encoding:NSASCIIStringEncoding];
}
不隶属于 StackOverflow