VS中C#语言获取数据地址,并在内存窗口查看
前言
课余时间想查看数据在内存中的存放,随做此记录,防忘。
一、获取数据地址
代码如下:
static void Main(string[] args)
{
int bst = 270;
unsafe
{
char* cp = (char*)&bst;
}//断点打在这
}
监视cp的值可获取地址如下图:
可看见存储的数据0e 01,需调换顺序010e转换成10进制为270.
二、需要启动不安全代码
路径:项目->属性->生成->勾选允许不安全代码。
三、指针读取与数据读取
static void Main(string[] args)
{
int bst1 = 99999;
Int16 bst2 = 9999;
Int16 bst3 = 9984;
unsafe
{
char* cp = (char*)&bst1;
Console.WriteLine(Convert.ToString((*cp), 16));
*(cp + 1) = (char)34;//一个地址存放16位数据
Console.WriteLine(bst1);
char* cp2 = (char*)&bst2;
Console.WriteLine(Convert.ToString((*cp2), 16));
*(cp2 ) = ((char)bst3);
Console.WriteLine(Convert.ToString((*cp2), 16));
Console.WriteLine(bst2);
}
}
结果:
数据99999,16进制为1869F,而第一个打印为869F,表明通过地址输出则输出16位数据。
通过*(cp + 1) = (char)34;更改数据,发现输出2262687的16进制为22869F,而34的16进制正好为22把原先*(cp + 1)地址中的1更改成了22,表明地址是以16位一组计算的。