2012-07-02 2 views
1

알파벳을 숫자 또는 정수로 변환하려고합니다. 이런 식으로 할 수는 있지만 더 좋은 방법이 있는지 알고 싶습니다. 나는 4 문자를 부식 번호로 변환해야하므로 알파벳으로 NSMutableArray를 만든 다음 문자열을 읽은 다음 한 번에 한 조각 씩 문자열을 가져옵니다.전체 알파벳을 OBJ-C의 숫자로 변환

편집 : 그래서 내 MSG가 있다면 "MNOP는"내가

alphabetArray = [[NSMutableArray alloc] init]; 
[alphabetArray insertObject:@"0" atIndex:0]; 
[alphabetArray insertObject:@"A" atIndex:1]; 
[alphabetArray insertObject:@"B" atIndex:2]; 
[alphabetArray insertObject:@"C" atIndex:3]; 
[alphabetArray insertObject:@"D" atIndex:4]; 
[alphabetArray insertObject:@"E" atIndex:5]; 
[alphabetArray insertObject:@"F" atIndex:6]; 
[alphabetArray insertObject:@"G" atIndex:7]; 
[alphabetArray insertObject:@"H" atIndex:8]; 
[alphabetArray insertObject:@"I" atIndex:9]; 
[alphabetArray insertObject:@"J" atIndex:10]; 
[alphabetArray insertObject:@"K" atIndex:11]; 
[alphabetArray insertObject:@"L" atIndex:12]; 
[alphabetArray insertObject:@"M" atIndex:13]; 
[alphabetArray insertObject:@"N" atIndex:14]; 
[alphabetArray insertObject:@"O" atIndex:15]; 
[alphabetArray insertObject:@"P" atIndex:16]; 
[alphabetArray insertObject:@"Q" atIndex:17]; 
[alphabetArray insertObject:@"R" atIndex:18]; 
[alphabetArray insertObject:@"S" atIndex:19]; 
[alphabetArray insertObject:@"T" atIndex:20]; 
[alphabetArray insertObject:@"U" atIndex:21]; 
[alphabetArray insertObject:@"V" atIndex:22]; 
[alphabetArray insertObject:@"W" atIndex:23]; 
[alphabetArray insertObject:@"X" atIndex:24]; 
[alphabetArray insertObject:@"Y" atIndex:25]; 
[alphabetArray insertObject:@"Z" atIndex:26]; 

NSRange range1 = NSMakeRange(0, 1); 
NSRange range2 = NSMakeRange(1, 1); 
NSRange range3 = NSMakeRange(2, 1); 
NSRange range4 = NSMakeRange(3, 1); 


NSString *letter1 = [msg substringWithRange:range1]; 
NSString *letter2 = [msg substringWithRange:range2]; 
NSString *letter3 = [msg substringWithRange:range3]; 
NSString *letter4 = [msg substringWithRange:range4]; 

NSString *msgAsInt = [[NSString alloc] 
      initWithFormat:@"%d%d%d%d", 
      [alphabetArray indexOfObject:letter1 ], 
      [alphabetArray indexOfObject:letter2 ], 
      [alphabetArray indexOfObject:letter3 ], 
      [alphabetArray indexOfObject:letter4 ]]; 

어떤 조언이 좋은 것 "13141516"인 문자열을 원한다. 또한,

NSMutableString *msgAsInt = [[NSMutableString alloc] init]; 
for (int i = 0; i < msg.length; i++) 
    [msgAsInt appendFormat:@"%02d", [msgAsInt characterAtIndex:i] - 'A']; 

: 아직이 테스트 havent 한 그러나 당신이 단순히 'int로서 메시지'를 원하는 경우

덕분에, 닉

+0

이 라인의 목적은 무엇인가? [alphabetArray insertObject : @ "0"atIndex : 0] ;? – WendiKidd

답변

3

는, (UTF-8을 가정)이 좋아해요 좋아 보인다 나중에 메시지를 복구하려면 02%d 앞에 추가하는 것이 좋습니다.

+0

그게 정확히 내가 입력 한거야! 이것은 문자열의 모든 문자가 'A'와 'Z'사이에 있거나 이상한 일이 일어날 것을 요구합니다. –

+0

네,하지만 그 대답은 어쨌든 의미합니다. –

+0

메시지가 "MNOP"이면 "12131415"가 표시됩니까? 나는 전화로 메시지를 보내고 길이를 줄이려고 노력하고 있으므로 숫자 대신 문자를 사용하기로 결정했습니다. 내가 잘하려고 노력한 것을 묘사하지 않았을 수도 있습니다. –

0

대문자 만 A에서 Z로 처리하는 경우 문자의 UTF8 값을 사용할 수 있습니다. 같은 수행 성능이 중요한 경우 (당신은 변환 할 문자열의 수천 예)

NSMutableString *msgAsInt = [NSMutableString string]; 
char *cMsg = calloc(5); 
if ([msg getCString:cMsg maxLength:4 encoding:NSUTF8StringEncoding]) { 
    for (int i = 0; i < 4; i++) { 
     [msgAsInt appendFormat:@"%d", (cMsg[i] - ('A' - 1))]; 
    } 
} 
else { 
    // there was a problem... 
} 
1

을 읽고 버퍼링 사용할 수 있습니다 및 쓰기 :

NSString *string = @"MNOP"; 

NSUInteger bufferSize = 4; 
NSRange range = NSMakeRange(0, MIN(bufferSize,[string length])); 

unichar inBuffer[bufferSize]; 
unichar outBuffer[bufferSize * 2]; 

[string getCharacters:inBuffer range:range]; 
NSUInteger outLength = 0; 

for (NSUInteger i = 0; i < range.length; i++) 
{ 
    unichar character = inBuffer[i]; 
    if (character >= 'A' && character <= 'Z') { 
     int value = character - 'A' + 1; 
     outBuffer[outLength++] = (value/10) + '0'; 
     outBuffer[outLength++] = (value % 10) + '0'; 
    } 
    else { 
     // error management 
    } 
} 

NSString *result = [NSString stringWithCharacters:outBuffer length:outLength]; 
+0

매력처럼 작동합니다. 고마워. –

관련 문제