【问题标题】:objective c - How to convert nsdata to byte array [duplicate]目标c-如何将nsdata转换为字节数组[重复]
【发布时间】:2013-03-11 10:18:06
【问题描述】:

我正在将 UIImage 转换为 NSData。我想将 NsData 转换为字节数组,并在 json Parser 的帮助下将该字节数组发布到服务器。

如果我将以下类型的静态字符串传递给服务器,它会接受并存储。以下只是示例字符串语法。我想要以下类型的字节数组将数据发布到服务器。

[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 作为结果。

我在上面的代码中做错了吗?

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

提前致谢。

【问题讨论】:

  • 您想将其转换为字节数组(C 意义上的术语)还是表示数值列表的 JSON 编码字符串?
  • 有什么理由在填充缓冲区后立即释放它?如果您希望缓冲区仍然保存 NSData 对象所保存的内容......您不能指望它释放它。只有在不再需要缓冲区时才释放它。
  • @udy 感谢您的回复,但使用这种方式。它不工作。
  • @zneak 我想将我的 NSData 转换为字节数组格式,如我的问题所示。
  • @Hrushikesh 为什么要将数据作为十进制值列表发布到服务器?这是相当低效的。为什么不只发布原始数据字节?

标签: iphone objective-c bytearray


【解决方案1】:

我不能 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:@"]"];

这是你需要的吗?

【讨论】:

  • 次要备注:如果您将bytes 声明为const uint8_t *bytes,那么您不需要在rhs 上进行类型转换。
猜你喜欢
  • 2012-05-28
  • 1970-01-01
  • 2010-10-17
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
相关资源
最近更新 更多