#include#include typedef unsigned char *byte_pointer;void show_bytes(byte_pointer start, size_t len) { size_t i; for (i = 0; i < len; i++) printf(" %.2x", start[i]); printf("\n");}void show_int(int x) { show_bytes((byte_pointer) &x, sizeof(int));}void show_float(float x) { show_bytes((byte_pointer) &x, sizeof(float));}void show_pointer(void *x) { show_bytes((byte_pointer) &x, sizeof(void *));}int main(int argc,char *argv[]) { int ival = 12345; float fval = (float)ival; int *pval = &ival; show_int(ival); show_float(fval); show_pointer(pval); system("pause"); return 0;}
上面的代码用于使用强制类型转换打印不同类型数据的字节表示,用typedef将数据类型byte_point定义为一个指向类型为“unsigned char”的指针。
传入的x变量将会被编译器认为是指向一个字节序列,并且其中的每个字节存放的都是一个“unsigned char”类型的值。
C格式化指令“%.2x”表示整数必须用至少两个数字的十六进制格式输出。
输出结果为:
机器 | 值 | 类型 | 字节(十六进制) |
Windows64 | 12345 | int | 39 30 00 00 |
Windows64 | 12345 | float | 00 e4 40 46 |
Windows64 | &ival | int * | 04 f8 6f 00 |