首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何打印c++中的内存位

如何打印c++中的内存位
EN

Stack Overflow用户
提问于 2016-02-12 22:15:58
回答 6查看 12K关注 0票数 6

我正在学习数字是如何在内存中表示的。我想知道如何在内存中打印一些整型和浮点型变量的实际表示(二进制或十六进制)。

例如,我想看看当加减它导致溢出时,这些数字会发生什么。

如何访问内存并将其打印出来?

EN

回答 6

Stack Overflow用户

发布于 2016-02-12 22:23:48

您需要将指向相关变量的指针分配给char *,并将其视为长度为sizeof(variable)的字节数组。然后,您可以使用%X格式说明符打印十六进制的每个字节。

您可以像这样定义函数:

代码语言:javascript
复制
void print_bytes(void *ptr, int size) 
{
    unsigned char *p = ptr;
    int i;
    for (i=0; i<size; i++) {
        printf("%02hhX ", p[i]);
    }
    printf("\n");
}

然后这样叫它:

代码语言:javascript
复制
int x = 123456;
double y = 3.14;
print_bytes(&x, sizeof(x));
print_bytes(&y, sizeof(y));
票数 9
EN

Stack Overflow用户

发布于 2016-02-13 00:22:32

...要打印实际的表示(二进制...

要将任何变量/对象转换为对二进制形式进行编码的字符串,请使用一个辅助函数将内存转换为“二进制”字符串。此方法还处理函数指针。使用C99或更高版本。

代码语言:javascript
复制
#include <stdio.h>
#include <assert.h>
#include <limits.h>

//                                    .... compound literal .......
#define VAR_TO_STR_BIN(x) obj_to_bin((char [sizeof(x)*CHAR_BIT + 1]){""}, &(x), sizeof (x))

char *obj_to_bin(char *dest, void *object, size_t osize) {
  const unsigned char *p = (const unsigned char *) object;
  p += osize;
  char *s = dest;
  while (osize-- > 0) {
    p--;
    unsigned i = CHAR_BIT;
    while (i-- > 0) {
      *s++ = ((*p >> i) & 1) + '0';
    }
  }
  *s = '\0';
  return dest;
}

int main(void) {
  int i = 42;
  double d = 3.1415926535897932384626433832795;
  printf("Sample\ndouble pi:%s\nint 42:%s\n", VAR_TO_STR_BIN(d), VAR_TO_STR_BIN(i) );
  return 0;
}

输出(注意:根据字节顺序的不同,结果可能会有所不同)

代码语言:javascript
复制
Sample
double pi:0100000000001001001000011111101101010100010001000010110100011000  
int 42:00000000000000000000000000101010

这种方法很容易适应十六进制的形式。

票数 4
EN

Stack Overflow用户

发布于 2016-02-12 22:28:28

假设您有一个名为memory的int变量。确保您知道它有多少位;对于许多处理器来说,int是32位,同时也是内存地址。所以你需要遍历每一位,就像这样:

代码语言:javascript
复制
unsigned int memory = 1234;
for (int i = 0; i < 32; i++)
{
  printf("%d ", memory >> i & 1);
}

这个简单的方法将每个比特与1进行OR运算,并将每个比特移位1。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35364772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档