如何从NSData转到byte []

Bru*_*ill 21 monodevelop xamarin.ios

如果我在NSData中有图像数据,如下从图像中提取,我该如何将这个NSData对象转换为字节数组?

NSData data = NSData.FromUrl(NSUrl.FromString(urlString));
Run Code Online (Sandbox Code Playgroud)

Tim*_*imo 41

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

byte[] dataBytes = new byte[data.Length];

System.Runtime.InteropServices.Marshal.Copy(data.Bytes, dataBytes, 0, Convert.ToInt32(data.Length));
Run Code Online (Sandbox Code Playgroud)

  • 对于base64编码图像,这至关重要。由于使用了data.ToArray(),最终导致图像损坏。 (2认同)

Bru*_*ill 28

我从Dimitris Tavlikos对这个问题的答复得到了这个问题的答案我问:

如何在MonoTouch中将本地图像的内容读入base64字符串

从那个答案我得知如果你包含一个引用,System.Linq那么该NSData对象将有一个ToArray()返回字节数组的方法.因此,引用此命名空间可以执行以下操作:

bytes[] dataBytes = data.ToArray();
Run Code Online (Sandbox Code Playgroud)

希望这些信息可以帮助别人.

  • 我发现这种方法比[Timo的解决方案](http://stackoverflow.com/a/6241501/458193)显着慢于更大的图像. (3认同)

Her*_*eld 6

Timo作为扩展方法的答案:

    public static byte[] ToByteArray (this NSData data) {
        var dataBytes = new byte[data.Length];
        System.Runtime.InteropServices.Marshal.Copy(data.Bytes, dataBytes, 0, Convert.ToInt32(data.Length));
        return dataBytes;
    }
Run Code Online (Sandbox Code Playgroud)