2012-10-05 4 views
0

같은 이름의 데이터를 유지하는 NSData에 NSString을 저장할 수있는 방법이 있습니까?

예 (이 괜찮지 만, 그것은 내가 원하는 게 아니에요) :
NSString을 NSData로 캐스팅

:

NSString *tmpString = @"Hello World!"; 
NSData *nsdataString = [tmpString dataUsingEncoding:NSUTF8StringEncoding]; 


나는 이런 식으로 뭔가 (즉 분명히 실패)가 필요합니다

NSData nsdataString = @"Hello World!"; 


몇 마디로 : NSString (캐스팅 연산자 사용)과 동일한 경우 NSData를 사용해야합니다 (). 이 접근 방식은 암호화 된 핵심 데이터 sqlite 데이터베이스 (NSString에 있음)를 미리로드하고 사용자가 영구 저장소의 필드에 액세스 할 때만 해독하는 데 매우 유용합니다. 의 EncryptedData가있는 NSData하고 keyString가있는 NSString입니다

NSData *decryptedData = [encryptedData AES256DecryptWithKey:keyString]; 

을 : 은 내가 사용하는 암호 해독합니다.

모두에게 감사드립니다.

답변

0

짧은 대답 : 아니오.

NSData 객체는 1과 0의 원시 시퀀스에 대한 래퍼입니다. NSString 객체는 인코딩되지 않은 유니 코드 문자의 배열에 대한 래퍼입니다.

NSData를 쓰는 데 사용 된 문자열 인코딩에 따라 여러 문자열을 나타낼 수 있습니다. 예를 들어, 리틀 엔디안 UTF16과 빅 엔디 언 UTF16 문자열은 동일한 문자를 나타낼 것이고 UTF-8 문자열을 UTF-16으로 구문 분석하면 횡설수설하게됩니다.

NSString을 문자열로 처리하기 전에 항상 NSString으로 변환해야합니다. 인코딩을 지정하기 전까지는 문자열이 아니기 때문입니다. 그것은 단지 원래의 것들과 0입니다.

정확히 무엇을하고 싶은지 확실하지 않지만 NSString의 -bytes 메서드로 얻을 수있는 C 문자열 (NSString 대신)으로 필요한 것을 수행 할 수 있습니다. . 그러나 언제든지 유용한 문자열로 끝내려면 인코딩을 염두에 두어야합니다.

+0

대단히 감사합니다! – dman

관련 문제