2012-09-12 3 views
0

대물 렌즈 c의 바이트 배열에서 문자열을 생성하려고합니다. 내 클래스 내에서, 나는 다음과 같은 일정한 문자를 정의stringWithBytes : length : encoding : 문자열의 길이가 잘못되었습니다.

static const char HELLO_WORLD[] = {0x68,0x65,0x6c,0x6c,0x6f,0x20,0x77,0x6f,0x72,0x6c,0x64,0x0d,0x0a}; 

I는 다음과 같습니다 MyClass에있는 방법이 있습니다

+ (NSString *)stringFromBytes:(const void*)bytes 
{ 
    return [[NSString alloc] initWithBytes:bytes length:(sizeof(bytes)/sizeof(bytes[0])) encoding:NSUTF8StringEncoding]; 
} 

나는이

[MyClass stringFromBytes:HELLO_WORLD]; 
를 수행하여 메소드를 호출하는 경우

나는 "지옥"처럼 보이는 문자열을 얻었습니다.이 부분의 길이 부분을 제대로 수행하고 있는지, 그리고 그 문제를 가정하고 있는지 확신 할 수 없습니다. 그 일을하는 방법에 대한 안내?

감사합니다.

답변

0

이 작업을 수행 :이 같은

+ (NSString *)stringFromBytes:(const char[])charbytes length:(NSUInteger)length 
{ 
    return [[NSString alloc] initWithBytes:charbytes length:length encoding:NSUTF8StringEncoding]; 
} 

사용 : 당신의

+ (NSString *)stringFromBytes:(const void*)bytes 

방법에서

NSString *str = [MyClass stringFromBytes:HELLO_WORLD length:sizeof(HELLO_WORLD)]; 
NSLog(@"%@",str); 
+0

불행하게도 호환되지 않는 포인터 유형 오류가 발생합니다 ('char'유형의 매개 변수에 'const char [9]'전송). const char을 그냥 char 또는 char * doesnt로 바꾸면 ... –

+0

팝업 오류가 이제 'sizeof of array function 매개 변수는'const char [] '대신'const char * '크기를 반환합니다. –

+0

편집 된 답변이 완벽하게 작동하는지 확인하십시오 지금 –

1

bytes는 당신이 보는 이유를 설명 단지 포인터 따라서 sizeof(bytes) == 4입니다 지옥".

포인터에는 포인터가 가리키는 구조체의 크기에 대한 정보가 없습니다. 추가 인수로 크기를 제공하거나 NULL로 종료되는 C 문자열로 작업해야합니다.

+0

이 표가 나에게 무슨 일이 벌어 졌는지 이해하는데 도움이 되었기 때문이다. 감사! –

관련 문제