2016-07-15 78 views
0

我想显示从Web服务产生的字节数组的图片。打印出如下所示的描述: (“-119”,80,78,71,13,10,26,10,0,0,0,13,3 ...) 从标题清楚它是用有符号整数编码的png。它是一个__NSCFArray,它具有__NSCFNumber元素。签名的字节数组到UIImage

在Objective-C我的代码(基于多google搜索):

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

我收到一个空的UIImage指针。 我也尝试将其转换为无符号的NSNumbers,然后将其传递给NSData,虽然也许我没有正确地做到这一点。我究竟做错了什么?

+0

从文件中读取相同的图像并确认NSData内容是否正确。 –

+0

从web服务?那么数据如何呢?哪一种?它的长度是多少?什么是imageArray和什么是myImageArray?阵列的长度是多少?如果它不是太长(并且内容图像不是“冒犯性或私密性的),您可以在这里复制它,我们可能会发现您的问题。 – Larme

+0

感谢您的帮助。我能够解决以下答案。 – jaymo

回答

0

您不能简单地将NSNumberNSArray转换为二进制数据。 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