强制执行内存级别

jus*_*mer 3 c# memory casting low-level

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

char* str = "1234";
int nonStr = *((int*)str);
Run Code Online (Sandbox Code Playgroud)

(我故意将字符串设为4个字符,因此在平均情况下它将具有与整数相同的字节数.)这将取消引用存储的内存,str如果是整数522207554则给出值(如果我进行了转换)对).

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

Mar*_*zek 6

您可以使用不安全的上下文和fixed语句来执行此操作:

static unsafe void Main(string[] args)
{
    string str = "1234";
    fixed(char* strPtr = str)
    {
        int* nonStr = (int*)strPtr;
        Console.WriteLine(*nonStr);
    }
}
Run Code Online (Sandbox Code Playgroud)

版画

3276849
Run Code Online (Sandbox Code Playgroud)