c# - 强制执行内存级别转换

标签 c# memory casting low-level

来自 C 的 Iirc,您可以按照以下行进行声明:

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

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

有没有办法在 C# 中做同样的事情?我知道这是一个低级的内存操作,通常对 C# 程序员很高兴地隐藏起来,我这样做只是为了进行教学练习。

最佳答案

您可以使用不安全的上下文和fixed语句来做到这一点:

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

打印

3276849

关于c# - 强制执行内存级别转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21652944/

相关文章:

c - 用户扫描号码的模 10^9 + 7

java - 在 Java 8 流中转换类型

c# - 如何在 C# 中使用 websocket-sharp 禁用强制连续帧

c# - 在 WPF Tabcontrol header 模板中显示 SelectedIndex

c++ - 从 32 位进程获取 64 位进程内存的入口点

c - 从缓冲区分配不同的内存块

c# - 如何使用 Ctrl+v 在文本框中启用粘贴

c# - 防止 NUnit 测试根据环境运行

perl - 如何在不耗尽 Perl 内存的情况下合并大型未排序文件中的行?

c# - 我应该覆盖字符串转换还是 ToString 方法?