强制执行内存级别

时间:2014-02-08 23:10:58

标签: c# memory casting low-level

来自C的Iirc,您可以按照这些方式发表声明:

char* str = "1234";
int nonStr = *((int*)str);

(我故意将字符串设为4个字符,因此在平均情况下它将具有与整数相同的字节数。)这将取消引用存储str的内存,并为其提供值(如果是一个整数(522207554如果我做了正确的转换)。

有没有办法在C#中做同样的事情?我知道这是一个低级别的内存操作,通常对C#程序员来说是幸福的隐藏,我只是为了教学而这样做。

3 个答案:

答案 0 :(得分:5)

您可以使用不安全的上下文和fixed语句:

来执行此操作
static unsafe void Main(string[] args)
{
    string str = "1234";
    fixed(char* strPtr = str)
    {
        int* nonStr = (int*)strPtr;
        Console.WriteLine(*nonStr);
    }
}

打印

3276849

答案 1 :(得分:1)

您正在寻找C#的unsafe功能。

这是one reference。对“C#unsafe指针取消引用”的一般搜索会产生许多结果。

答案 2 :(得分:0)