问:c\c++直接读取内存单元

c\c++指针如何直接读取某个内存地址的数据
比如直接读取0x00327C5F地址中的数据,并输出
或直接往一个内存地址中写入数据
比如直接往0x0052F3E40地址写入0x55

char * p = 0x00327C5F;
*p = 你的值
即可
前提是这个地址要有效。

指针p指向这个内存地址,*p访问这个内存地址的数据。

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7555623
  • 除此之外, 这篇博客: C\C++ 数据类型之各种变量类型在内存中存储值时需要占用的内存小记中的 二、各种变量类型在内存中存储值时需要占用的内存 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 下表显示了各种变量类型在内存中存储值时需要占用的内存,以及该类型的变量所能存储的最大值和最小值。
    
    注意:不同系统会有所差异,一字节为 8 位。
    
    注意:long int 8 个字节,int 都是 4 个字节.
    早期的 C 编译器定义了 long int 占用 4 个字节,int 占用 2 个字节,新版的 C/C++ 标准兼容了早期的这一设定。
    

    注意:变量的大小会根据编译器和所使用的电脑而有所不同。
    在这里插入图片描述

  • 以下回答由chatgpt基于相关博客总结生成:

    使用指针读取或写入某个内存地址的数据,可以按照以下方式实现:

    假定要读取地址为0x00327C5F的内存单元中的数据并输出数据,代码如下:

    int value;
    int *ptr = (int*)0x00327C5F; //定义指针,指向内存地址0x00327C5F对应的位置
    value = *ptr; //通过指针来读取内存单元中的数据
    printf("The value at memory address 0x00327C5F is: %d\n", value); //输出数据
    

    也可以使用位操作符来读取某个内存地址的数据:

    int value;
    int *ptr = (int*)0x00327C5F; //定义指针,指向内存地址0x00327C5F对应的位置
    unsigned char *bytePtr = (unsigned char*)ptr; //将指针强制转化为指向字节类型的指针
    value = bytePtr[0];
    value |= bytePtr[1] << 8;
    value |= bytePtr[2] << 16;
    value |= bytePtr[3] << 24; //通过位运算将若干个字节链接成一个整型数据
    printf("The value at memory address 0x00327C5F is: %d\n", value); //输出数据
    

    如果需要将数据写入地址为0x0052F3E40的内存单元,可以按照以下方式实现:

    int value = 42;
    int *ptr = (int*)0x0052F3E40; //定义指针,指向内存地址0x0052F3E40对应的位置
    *ptr = value; //通过指针将数据写入内存单元中
    

    同样也可以使用位操作符将一个整型数据写入某个内存地址中:

    int value = 42;
    int *ptr = (int*)0x0052F3E40; //定义指针,指向内存地址0x0052F3E40对应的位置
    unsigned char *bytePtr = (unsigned char*)ptr; //将指针强制转化为指向字节类型的指针
    bytePtr[0] = value & 0xFF;
    bytePtr[1] = (value >> 8) & 0xFF;
    bytePtr[2] = (value >> 16) & 0xFF;
    bytePtr[3] = (value >> 24) & 0xFF; //通过位运算将一个整型数据拆分成若干个字节,并依次写入内存地址中