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

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

我理解它可以理解我的学习材料中的图表,我只是希望能够在我的一些学习计划中以编程方式显示字节模式。

我意识到这是非常微不足道的,但任何答案都会帮助我理解这些概念。

谢谢。

编辑:我主要使用XCode进行其他开发项目,但是有适用于Windows7和fedora core的VM。 在工作中我使用XP与visual studio 2005.(我无法评论,因为我仍然是一个n00b:D)

我使用了unwind的解决方案,这是我正在寻找的。 我也在想,也许我可以使用dos DEBUG命令,因为我也想查看块的内存。 再一次,这只是为了帮助我强化我正在学习的东西。 再次感谢大家!

你可以使用这样的函数来打印字节:

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(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); 

这显示的字节就像原始数值一样,以hex表示,通常用于这些“内存转储”。

对于运行“Intel(R)Xeon(R)”CPU的随机(甚至可能是虚拟的,据我所知)Linux机器,它打印:

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

这也轻松地certificate了Intel系列的CPU:s真的是小端 。

如果您使用的是gcc和X,则可以使用DDD调试器为您绘制数据结构的漂亮图片。

仅仅为了完整性,一个C ++示例:

 #include  template  void print_bytes(const T& input, std::ostream& os = std::cout) { const unsigned char* p = reinterpret_cast(&input); os << std::hex << std::showbase; os << "["; for (unsigned int i=0; i(*(p++)) << " "; os << "]" << std::endl;; } int main() { int i = 12345678; print_bytes(i); float x = 3.14f; print_bytes(x); } 

大多数(可视)调试器都有一个“查看内存”选项.IIRC中的Xcode非常基本,只显示HEX和ASCII中的字节,行长可变.Visual Studio(Debug-> Windows-> Vs2008中的内存)可以将hex部分格式化为不同的整数长度,或浮点,更改字节顺序,并显示ANSI或UNICODE文本。您还可以设置几乎任何数字的窗口宽度(我认为xcode只允许你去64字节宽我在这里工作的另一个IDE有很多选项,但不如VS那么多。

或者,如果你有boost lib并且想要使用lambda评估,你可以这样做…

 template void bytePattern( const T& object ) { typedef unsigned char byte_type; typedef const byte_type* iterator; std::cout << "Object type:" << typeid( T ).name() << std::hex; std::for_each( reinterpret_cast(&object), reinterpret_cast(&object) + sizeof(T), std::cout << constant(' ') << ll_static_cast(_1 )&&0xFF ); std::cout << "\n"; } 

试试这个:

 MyClass* myObj = new MyClass(); int size=sizeof(*myObj); int i; char* ptr = obj; // closest approximation to byte for( i=0; i 

干杯,

JRH。