[C#] 如何把void*转换为byte[]

一般来说,C#库的对外接口应该提供byte[]这样比较容易用的接口,而不应该提供裸的void*

但是有些库确实是这么封装的。那么就有一个如何转换的问题。MSDN推荐的转换方式是使用UnmanagedMemoryStream。代码如下:

byte[] data = null;
unsafe
{
	int iLen;
	void* lpdata;

	data = new byte[iLen];
	using (UnmanagedMemoryStream ms = new UnmanagedMemoryStream((byte*)lpdata, iLen))
	{
		ms.Read(data, 0, data.Length);
	}
}
时间: 2024-10-07 08:55:37

[C#] 如何把void*转换为byte[]的相关文章

C#中使用Buffer.BlockCopy()方法将string转换为byte array的方法:

public static void BlockCopy(Array src, int srcOffset, Array dst, int dstOffset, int count); 将指定数目的字节从起始于特定偏移量的源数组复制到起始于特定偏移量的目标数组. /// <summary> /// C#中使用Buffer.BlockCopy()方法将string转换为byte array的方法 /// </summary> /// <param name="str&

Swift中,把NSData转换为Byte数组的三种方法

最近做IOS开发需要从一个NSData中读出数据.但是找不到相关文档.网上搜索也有人问,我看到有Objective-C的答案,但基本上没有Swift的方案. NSData的bytes是UnsafePointer<Void>类型,我不知道怎样直接获取到他的值(如果你知道,请一定要告诉我). 所以我自己摸索了一下把NSData转换为[Byte]的方法,希望起到抛砖引玉的作用. 下面直接在PlayGround中演示: 最后我采用的当然是第三种方法: import Foundation var b:[

16进制字符串转换为byte数组

/// <summary> /// 16进制字符转换为byte数组 /// </summary> /// <param name="hexString">偶数位,由16进制字符[0-9a-fA-F]组成</param> /// <returns>null为转换失败</returns> private byte[] HexStringToBytes(string hexString) { if (string.IsN

cocos2d-x 编译问题集合之error C2440: “类型转换”: 无法从“void (__thiscall ::* )(void)”转换为“

1.提示为 error C2440: "类型转换": 无法从"void (__thiscall xx::* )(void)"转换为"cocos2d::SEL_CallFuncN" 提示前 调用语句为 callfuncN_selector(GameMenu::menuEnter) menuEnter这个方法里边是没有形参的 导致了这个问题出现 修改办法为 将menuEnter这个方法改成menuEnter(CCNode * node) 加入这个形参

blob 转换为byte[]

public byte[] blobToByte(Blob blob) throws Exception { byte[] bytes = null; try { InputStream in=blob.getBinaryStream(); BufferedInputStream inBuffered = new BufferedInputStream(in); ByteArrayOutputStream out = new ByteArrayOutputStream(1024); byte[]

消息传递MFC error C2440 “static_cast” 无法从“void (_thiscall )(void)”转换为“LRESULT

转载至:http://www.educity.cn/wenda/566627.html error C2440 “static_cast” 无法从“void (__thiscall )(void)”转换为“LRESULTerror C2440 “static_cast” 无法从“void (__thiscall CPppView )(void)”转换为“LRESULT (__thiscall CWnd )(WPARAM,LPARAM)” 不能转换void (_thiscall CMainFram

网络流转换为Byte数组

1 /// <summary> 2 /// 网络流转换为Byte数组 3 /// </summary> 4 /// <param name="stream"></param> 5 /// <returns></returns> 6 public static byte[] ReadFully(Stream stream) 7 { 8 byte[] buffer = new byte[128]; 9 using (M

C#程序中将图片转换为byte数组,并将byte数组转换为图片

/// <summary> /// 将图片以二进制流 /// </summary> /// <param name="path"></param> /// <returns></returns> public byte[] SaveImage(String path) { FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read); //

Silverlight将图片转换为byte

前言 又是好久没写博客了~~~,越来越懒,越来越没有目标了! 正文 最近总是有人问如何通过Silverlight上传图片并保存的后台服务器?众所周知,Silverlight是客户端程序,不能很好与服务器进行“沟通”,上传图片的方法呢大致都是通过以下流程: 1.客户端获取图片-->2.转换能够传输的数据-->3.传递数据到服务端-->4.服务端还原数据为图片 第一步和第四步没有问题,问题大多出在第二步和第三步,如何得到客户端和服务端都能识别并且容易传递的数据呢? 如果你使用的客户端和服务端