2010-03-16 1 views
1

를 실패 I가 내가 다음 코드 줄 사용하여있는 NSString로 전환하는 것을 시도하고있다있는 NSData 개체 : 대신

NSString *theData = [[NSString alloc] initWithData:photo encoding:NSASCIIStringEncoding]; 

불행히도 나는 다음과 같은 결과를 얻고을, 내 원하는 이진 출력 (여기서 이진 출력을 기대할 수 있습니까?);

ÿØÿà 

어떤 도움을 주셔서 감사합니다.
감사합니다. 리키.

+0

이 원하는 출력 무엇입니까 : 당신이 뭔가를 할 수 있습니다? – kennytm

+0

바이너리 데이터 문자열입니다. – Ricky

답변

4

임의의 이진 데이터를 사람이 읽을 수있는 문자열 (예 : 일련의 16 진수 값)로 변환하려는 경우 잘못된 방법을 사용하고 있습니다. 당신이하는 일은 데이터 그 자체를 ASCII 인코딩의 문자열로 해석하는 것입니다.

단순히 데이터를 파일이나 표준 출력에 기록하려면 [theData description]을 사용할 수 있습니다.

0

initWithData : 메소드로 이진 데이터를 구문 분석 할 수 없습니다. 내용의 16 진수 문자열을 원하면 description NSData 메서드를 사용할 수 있습니다.

+0

그건 맞지 않아. '- [NSString initWithData :]'는 데이터 객체의 전체 내용 (0 바이트 포함)을 사용하고 주어진 인코딩으로 해석합니다. 또한 '\ 0'은 ASCII로 정의 된 문자입니다. –

+0

하지만이 방법을 사람이 읽을 수있는 문자열을 생성하는 데 사용할 수는 없습니다. –

2

"바이너리 출력"이 무슨 뜻인지 불분명합니다. 문자열에 "01010100011110110"또는 "0x1337abef"줄에 텍스트가 포함될 것으로 예상되는 경우 NSString이 어떻게 작동하는지 오인됩니다. NSString의 initWithData:encoding:은 데이터의 바이트를 특정 인코딩의 문자열 바이트처럼 해석합니다. 그것은 NSString의 dataUsingEncoding:의 반대입니다. 을 호출하여 dataUsingEncoding:의 결과를 얻은 다음 똑같은 문자열을 다시 얻을 수 있습니다.

사람이 읽을 수있는 16 진수 문자열로 데이터를 변환하려면 직접 변환해야합니다.

NSMutableString *binaryString = [NSMutableString stringWithCapacity:[data length]]; 
unsigned char *bytes = [data bytes]; 
for (int i = 0; i < [data length]; i++) { 
    [binaryString appendFormat:@"%02x", bytes[i]]; 
} 
+1

나는'data [i] '대신'((unsigned char *) [data bytes]) [i]'를 사용한다고 믿는다. –

+0

다소 차이가 있습니다. 내가 처음에 쓴 줄 알았던 것으로 수정. 오. – Chuck

+0

최적화 된 성능'stringWithCapacity :'를 이미 사용하고 있다면 올바른 용량 인'2 * [data length]'를 계산해야합니다. –