[英]obtaining objective c nsstring from c char[]
代碼如下。 我試着獲得像“a1”,“c4”這樣的字符串答案
這就是我所擁有的而不是“a1”:“adresse finale:\\ 340} 00 \\ 214”with this prinf:
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;
}
你能幫我么? 提前致謝。
我可以在您的代碼中看到三個問題:
你做的時候
lettreChiffre[1]=(char) j;
記住j
是1
到8
之間的數字,所以你得到的值是j
的ASCII字符,而不是字符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建議的循環。
循環的目的是什么? 你有一個循環,基本上強制矩陣計算“方形地址”。 如果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];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.