서론
iOS에서 개발을 하다보면, C <-> Objective C 간 데이터 형변환을 하게되는 경우가 빈번한 것 같다. 예를 들어 C에서의 문자열은 Char * / Char[] 데이터형을 사용하지만, Objective C에서는 NSString객체를 사용한다. 또한 NSString 객체를 Char * / Char[]의 형태로 역변환해서 사용하는 경우도 빈번하기 때문에 경우의 수도 많고, 외워서 쓰기에는 불편함이 있어서 정리해서 모아보는 글을 작성해보기로 하였다.
본론
1 ) unsigned char * ( C ) 와 NSData (Objective C)
1-1) unsigned char * to NSData
1 2 3 | unsigned char * byteString = "byteString"; int byteStringLen = strlen(byteString); NSData * data = [NSData dataWithBytes:byteString length:byteStringLen]; |
byteString이 바이트 data라고 가정할 때, 위와 같이 변환 할 수 있다. 만약, 문자열을 바이트 데이터로 바꾸고 싶다면 base64디코딩 과정을 거쳐야 한다.
1-2) NSData to unsigned char *
1 2 | NSData * data; unsigned char* bytesForData = [data bytes]; |
예시에서는 값이 들어 있지 않지만, NSData형의 data라는 변수에 값이 있을 때 위와 같이 변환 할수 있다.
2 ) char * ( C ) 와 NSString (Objective C)
1-1) char * to NSString
1 2 | NSString * nsString = @"Hello Bach!"; char * cString = [nsString UTF8String]; |
NSString에서 제공하는 UTF8String 메서드는 NSString문자열을 char * 데이터형을 반환해준다.
1-2) NSString to char *
1 2 | char * cString = "Hello Bach!"; NSString *nsString = [NSString stringWithUTF8String:cString]; |
NSString 문자열 변수 또한 NSString에서 제공하는 stringWithUTF8String 메서드를 통해서 char * 데이터형으로 변환할 수 있다.
결론
개인적으로 Objective C에서 프로그래밍을 하면서 느낀점은 C와 같이 혼용해서 사용할 수 있기 때문에 편한 점도 있지만 불편한 점 또한 있고, 그 불편한 점 중에 한가지가 데이터형태가 일치하지 않기 때문에 변환 과정이 필요하다는 것이다. 간단하게 가장 많이 사용하는(본인이) 형변환 두 가지만을 다루었는데, 다른 데이터 형 변환 중 자주 쓰이는 변환이 생긴다면 더 추가할 생각이다.
'Study > iOS' 카테고리의 다른 글
iOS Hooking#2(Frida) (0) | 2017.04.19 |
---|---|
iOS Hooking#1(Logos) (1) | 2017.04.18 |
2장 iOS 해킹 기초 (1) (0) | 2016.06.18 |
[iOS/GCC] __attribute__((constructor)) / __attribute__((desstructor)) (0) | 2016.05.13 |
[iOS] MD5해시 생성 / SHA256해시 생성 (0) | 2016.05.09 |