2013-03-21 34 views
4

我正在将UIImage转换为NSData。我想将NsData转换为Byte Array,并在json Parser的帮助下将该Byte数组发送到服务器。objective c - 如何将nsdata转换为字节数组

如果我传递以下类型的静态字符串到服务器它接受和存储。以下仅是示例字符串语法。我想follwoing类型的字节数组发布数据到服务器。

[255,216,255,224,0,16,74,70,73,70,0,1,1,1,0,96,0,96,0,0,255,219,0,67,0,8,6,6 ,7,6,5,8,7,7,7,9,9,8,10,12,...]

对于上述结果我正在转换图像数据如下:

UIImage *image = [UIImage imageNamed:@"image.png"]; 
NSData *data = UIImagePNGRepresentation(image); 

现在我想的NSData转换为字节数组,我使用下面的代码:

NSUInteger len = [data length]; 
Byte *byteData = (Byte*)malloc(len); 
memcpy(byteData, [data bytes], len); 
free(byteData) 

,我也这样存储的NSData。但不能得到有关结果。 我还输入了循环代码,但每次输出结果都是aPNG

我在做上述代码中的任何错误吗?

请给我一些帮助,并要求提供任何帮助。

在此先感谢。

+0

是否要将其转换为字节数组(C的含义)或表示数值列表的JSON编码字符串? – zneak 2013-03-21 18:35:45

+0

为什么要在填满缓冲区后尽快释放缓冲区?如果你期望缓冲区仍然保持着NSData对象所持有的东西......你不能指望它释放它。只有当你不再需要缓冲区时才释放它。 – mah 2013-03-21 18:37:11

+0

@udy感谢您的回复,但是使用这种方式。它不工作。 – 2013-03-21 18:40:40

回答

10

我不是100%确定这是你正在寻找或没有。试试:

UIImage *image = [UIImage imageNamed:@"image.png"]; 
NSData *data = UIImagePNGRepresentation(image); 
NSUInteger len = data.length; 
uint8_t *bytes = (uint8_t *)[data bytes]; 
NSMutableString *result = [NSMutableString stringWithCapacity:len * 3]; 
[result appendString:@"["]; 
for (NSUInteger i = 0; i < len; i++) { 
    if (i) { 
     [result appendString:@","]; 
    } 
    [result appendFormat:@"%d", bytes[i]]; 
} 
[result appendString:@"]"]; 

这是你所需要的?

+0

小提示:如果你将'bytes'声明为'const uint8_t * bytes',那么你不需要在rhs上输入类型。 – 2013-03-21 21:39:00

相关问题