温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - How to visualize bytes with C/C++
c c++

其他 - 如何使用C / C ++可视化字节

发布于 2020-03-27 11:51:26

我正在通过一些C ++培训进行工作。到目前为止,还不错,但是我需要一些帮助来加强我正在学习的一些概念。我的问题是我该如何可视化我创建的对象的字节模式。例如,如何打印出结构,长整型,整型等字节模式?

我脑子里很明白,也可以理解学习资料中的图表,我只是想能够以编程方式从我的一些学习程序中显示字节模式。

我意识到这很简单,但是任何答案都将极大地帮助我理解这些概念。

谢谢。

编辑:我主要将XCode用于其他开发项目,但具有适用于Windows7和fedora核心的VM。在工作中,我将XP与Visual Studio 2005配合使用。(我无法发表评论,因为我在这里仍然是n00b:D)

我使用了unwind的解决方案,它与我正在寻找的解决方案有关。我也在想,也许我可以只使用dos DEBUG命令,因为我也想查看内存块。同样,这只是为了帮助我巩固所学内容。再次感谢大家!

查看更多

查看更多

提问者
OhioDude
被浏览
210
unwind 2017-06-19 15:48

您可以使用如下函数来打印字节:

void print_bytes(const void *object, size_t size)
{
  // This is for C++; in C just drop the static_cast<>() and assign.
  const unsigned char * const bytes = static_cast<const unsigned char *>(object);
  size_t i;

  printf("[ ");
  for(i = 0; i < size; i++)
  {
    printf("%02x ", bytes[i]);
  }
  printf("]\n");
}

用法看起来像这样,例如:

int x = 37;
float y = 3.14;

print_bytes(&x, sizeof x);
print_bytes(&y, sizeof y);

这将字节显示为原始数值,以十六进制形式显示,通常用于此类“内存转储”。

在运行“英特尔(R)至强(R)” CPU的随机(据我所知甚至可能是虚拟的)Linux机器上,打印:

[25 00 00 00]
[c3 f5 48 40]

这也方便地证明了Intel CPU:s系列确实是endian