Xamarin.ios 如何从NSData转换为字节[]

Xamarin.ios 如何从NSData转换为字节[],xamarin.ios,monodevelop,Xamarin.ios,Monodevelop,如果NSData中有图像数据,从图像中提取如下,如何将此NSData对象转换为字节数组 NSData data = NSData.FromUrl(NSUrl.FromString(urlString)); 我从Dimitris Tavlikos对我提出的问题的回答中得到了这个问题的答案: 从这个答案中我了解到,如果包含一个引用System.Linq,那么NSData对象将有一个ToArray()方法,该方法将返回一个字节数组。因此,通过引用此命名空间,您可以执行以下操作: bytes[] d

如果NSData中有图像数据,从图像中提取如下,如何将此NSData对象转换为字节数组

NSData data = NSData.FromUrl(NSUrl.FromString(urlString));

我从Dimitris Tavlikos对我提出的问题的回答中得到了这个问题的答案:

从这个答案中我了解到,如果包含一个引用
System.Linq
,那么
NSData
对象将有一个
ToArray()
方法,该方法将返回一个字节数组。因此,通过引用此命名空间,您可以执行以下操作:

bytes[] dataBytes = data.ToArray();

希望此信息对其他人有所帮助。

Timo的答案作为扩展方法:

公共静态字节[]ToByteArray(此NSData数据){
var-dataBytes=新字节[data.Length];
System.Runtime.InteropServices.Marshal.Copy(data.Bytes,dataBytes,0,Convert.ToInt32(data.Length));
返回数据字节;
}

问题是:你为什么要这样做?如果您需要从URL获取数据,只需使用.NET的WebClient类即可。我之所以需要这样做,是因为MonoTouch中的WebClient似乎会导致我的应用程序在启动时崩溃。如果排除对WebClient的引用,应用程序将正常启动。WebClient代码甚至不在启动事件中,而是在触地事件处理程序中。这就是为什么我在寻找WebClient的替代解决方案。谢谢,Timo。我使用了不同的解决方案(请参阅我发布的答案),但我也测试了您的解决方案,效果很好。因此,我将给你这个答案的信用,并将其标记为可接受的解决方案。谢谢。对于base64编码图像,这是至关重要的。因为我们使用的是data.ToArray(),所以我们最终得到了损坏的图像。我发现这种方法比更大的图像要慢得多。@投否决票的人:如果你认为答案太差,需要投否决票,至少要有勇气留下评论,说明你为什么投否决票。嘿,我很抱歉没有承认我投了反对票。几天前,我重新审视了这个问题,并使用了你的方法,因为它拥有最多的选票,结果发现我已经来过这里(我忘了!),并且已经发现这个方法比Timo的要慢得多。你说得对答案不错,更重要的是,不符合“没有用处”的标准。这对我来说没什么用处,但对任何想找一艘性能合理的单尾班轮的人来说肯定是有用的。我的否决票是情绪化的,是错误的,所以我修正了。嗨,丹。感谢您承认否决票,感谢您解释导致否决票的情况,感谢您扭转否决票。我很感激。还感谢您提供有关两种解决方案之间性能差异的信息。我的应用程序使用的是小图像,因此我从来没有必要对解决方案进行性能测试,但我相信这些信息将帮助其他存在性能问题的人。我很好奇为什么
ToArray
方法的性能很差。也许这是Monotouch的人可以看到并纠正的东西。感谢您的评论。撇开性能差异不谈,我们在通过HTTP将UIImage发布为Base64编码PNG时遇到了数据一致性问题。从.ToArray()迁移到System.Runtime.InteropServices.Marshal.Copy方法可以消除服务器上最终损坏的PNG文件。
bytes[] dataBytes = data.ToArray();