2016-07-15 3 views
0

웹 서비스에서 생성 된 바이트 배열로부터 그림을 표시하려고합니다. 설명을 인쇄하면 다음과 같습니다. ("-119", 80787113102610000,13,3 ...) 헤더에서 명확합니다 그것은 부호있는 정수로 인코딩 된 PNG입니다. __NSCFNumber 요소가있는 __NSCFArray입니다. (많은 인터넷 검색 기준) 목표 - C에서UIImage에 대한 부호 첨부 바이트 배열

내 코드 :

NSData *data = [NSData dataWithBytes:(const void *)myImageArray length [myImageArray count]]; 
UIImage *arrayImage = [UIImage imageWithData:data]; 

내가 널있는 UIImage 포인터를받을 수 있습니다. 또한 서명되지 않은 NSNumbers로 변환 한 다음 NSData로 전달하려고 시도했습니다.하지만이 작업을 올바르게 수행하지는 못했습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

파일에서 동일한 이미지를 읽고 NSData 내용이 올바른지 확인하십시오. –

+0

웹 서비스에서 왔습니까? 그럼 데이터는 어땠어? 어떤 종류? 그 길이는 어때? 'imageArray'는 무엇이고'myImageArray'는 무엇입니까? 배열의 길이는 얼마입니까? 너무 길지 않은 경우 (콘텐츠 이미지가 "불쾌감을 주거나 개인 정보가 아님"이 아닌 경우 여기에 복사하면 문제를 찾을 수 있습니다.) – Larme

+0

도움을 주셔서 감사합니다. 아래 답변을 통해 문제를 해결할 수있었습니다 : – jaymo

답변

0

NSArrayNSNumber을 이진 데이터로 변환 할 수 없습니다. NSArrayNSNumber은 모두 개체입니다. 그들은 자신의 헤더와 내부 구조가 원래 바이트 문자열과 같지 않습니다. 이러한 라인을 따라 뭔가 그것을 바이트 단위로 변환해야합니다 :

NSArray *bytes = @[@1, @2, @3]; 
NSMutableData *data = [NSMutableData dataWithLength:bytes.count]; 
for (NSUInteger i = 0; i < bytes.count; i++) { 
    char value = [bytes[i] charValue]; 
    [data replaceBytesInRange:NSMakeRange(i, 1) withBytes:&value]; 
} 

char는 작업중인 데이터의 종류 것으로 보인다 서명 int8_t입니다. 그것은 종종 "ASCII 문자"를 의미하는 데 사용되지만 C에서는 "바이트"를 의미하기도합니다.

+0

감사합니다! 이 방법이 어떻게 바뀌 었습니까? – jaymo