【问题标题】:Convert UIImage to byte array, and send to WCF wsdl .NET remote server将 UIImage 转换为字节数组,并发送到 WCF wsdl .NET 远程服务器
【发布时间】:2013-12-04 19:47:27
【问题描述】:

过去一周我搜索了高低,关于SO的类似问题都没有解决我的问题。

我正在尝试将 UIImage 上传到 .NET wcf(wsdl?)。需要是字节数组的形式。

我试过了

NSData *data = [[NSData alloc]initWithData:UIImageJPEGRepresentation(Image, 1)];
NSUInteger len = [data length];
Byte *byteData = (Byte*)malloc(len);
memcpy(byteData, [data bytes], len);

字节数据返回

ˇÿˇ‡

我确定这看起来不像是字节数组。字节数组应该是什么样子的? 我也尝试过调用 NSData 描述,其他各种都没有成功。

我也试过了

[self.imageFile base64EncodedStringWithOptions:NSDataBase64EncodingEndLineFeed];

然后回来

/9j/4AAQSkZJRgABAQEAJAAkAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAAAkA

这是字节数组的样子吗?我猜一个字节数组应该如下所示。

[244, 22, 244, 4, 32, etc.....]

字节数组需要嵌入到 XML 中。任何帮助表示赞赏。谢谢!

【问题讨论】:

标签: ios .net objective-c wcf wsdl


【解决方案1】:

您发布的代码会将 UIImage 转换为 NSData 对象中的二进制 JPEG 图像,然后从 NSData 中提取字节值。那是一个字节数组。 (包含二进制数据字节的内存块。)

听起来您真正想做的是将二进制数据格式化为 XML 格式。那是一个不同的问题。

我在 Google 上进行了搜索 “你如何在 XML 中表示二进制数据”,看来 Base64 编码是共识。我建议您查看 Base64 编码。

【讨论】:

  • 那是什么结果?要具体。
  • Base64 编码给了我一个字符串“w7/DmMO/w6AAEEpGSUYAAQEBAAAAAAAAAw7/DoQD....”。当我将此字符串附加到 XML 的 标记中并将其发送出去时,WCF 服务没有返回任何内容(没有标题,没有数据)。基于此 -->stackoverflow.com/a/2538507/1989101 ,WCF 需要原始二进制数据,而不是 base64。
  • (cont') 维护此 WCF 服务的小组最初指示我发送二进制数据。因此,尝试在 NSStrring 和 NSASCIIStringEncoding 上使用 initWithBytes,我将这些字符“ÿØÿà”作为图像文件。我在 XML 中发送它,但是 XML 在这 4 个字符之后终止(突然结束,没有结束标记)。检查这个字符串的长度,实际上是 len=7000+,而不是 4。但是,我实际上是通过在 标记中将原始二进制作为字符串发送的服务器响应。我得到标题,+“字节 0x00 在此位置无效。第 1 行,位置 413”。
  • NSString *image = [[NSString alloc]initWithBytes:[self.imageFile bytes] length:[self.imageFile length] encoding:NSASCIIStringEncoding];
【解决方案2】:

我认为更好的方法是使用 Base64 编码。

【讨论】:

    猜你喜欢
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多