簡體   English   中英

從c char []獲取目標c nsstring

[英]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;

記住j18之間的數字,所以你得到的值是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM