c#中使用不安全代码(使用指针的代码)

c#中使用不安全代码(使用指针的代码)

ID:11020699

大小:88.50 KB

页数:7页

时间:2018-07-09

c#中使用不安全代码(使用指针的代码)_第1页
c#中使用不安全代码(使用指针的代码)_第2页
c#中使用不安全代码(使用指针的代码)_第3页
c#中使用不安全代码(使用指针的代码)_第4页
c#中使用不安全代码(使用指针的代码)_第5页
资源描述:

《c#中使用不安全代码(使用指针的代码)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、如何在C#中使用不安全代码(使用指针的代码)在 C# 中很少需要使用指针,但仍有一些需要使用的情况。例如,在下列情况中使用允许采用指针的不安全上下文是正确的:处理磁盘上的现有结构涉及内部包含指针的结构的高级 COM 或平台调用方案性能关键代码 不鼓励在其他情况下使用不安全上下文。具体地说,不应该使用不安全上下文尝试在 C# 中编写 C 代码。警告 使用不安全上下文编写的代码无法被验证为安全的,因此只有在代码完全受信任时才会执行该代码。换句话说,不可以在不受信任的环境中执行不安全代码。例如,不能从 Internet 上直接运行不安全代码。该教程

2、包括下列示例:示例 1   使用指针复制一个字节数组。示例 2   显示如何调用 Windows ReadFile 函数。 示例 3   显示如何打印可执行文件的 Win32 版本。示例 1以下示例使用指针将一个字节数组从 src 复制到 dst。用 /unsafe 选项编译此示例。// fastcopy.cs// compile with: /unsafeusing System;class Test{   //The unsafe keyword allows pointers to be used within the //follow

3、ing method:    static unsafe void Copy(byte[] src, int srcIndex,        byte[] dst, int dstIndex, int count)    {        if (src == null 

4、

5、 srcIndex < 0 

6、

7、            dst == null 

8、

9、 dstIndex < 0 

10、

11、 count < 0)        {            throw new ArgumentException();        }      

12、  int srcLen = src.Length;        int dstLen = dst.Length;        if (srcLen - srcIndex < count 

13、

14、  dstLen - dstIndex < count)        {            throw new ArgumentException();        }        // The following fixed statement pins the location ofthe src and dst        // o

15、bjects in memory so that they will        // not be moved by garbage collection.        fixed (byte* pSrc = src, pDst = dst)        {            byte* ps = pSrc;            byte* pd = pDst;第7页            // Loop over the count in blocks of 4 bytes, copying an            // 

16、integer (4 bytes) at a time:            for (int n =0 ; n < count/4 ; n++)            {                *((int*)pd) = *((int*)ps);                pd += 4;                ps += 4;            }            // Complete the copy by moving any bytes that weren't            // move

17、d in blocks of 4:            for (int n =0; n < count%4; n++)            {                *pd = *ps;                pd++;                ps++;            }        }    }    static void Main(string[] args)     {        byte[] a = new byte[100];        byte[] b = new byte[100

18、];        for(int i=0; i<100; ++i)            a[i] = (byte)i;        Copy(a, 0, b,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。