题目
一个 int 类型变量或 double 类型变量在连续几个字节的
内存中存放。读取数值时,当数值中包含小数点时类
型为 double,否则类型为 int。将读入的数值存放在 int
类型变量或 double 类型变量中。以十六进制格式(a-f
字母采用小写形式)输出相应变量的连续的每个字节
的值。
• 读入的数据保证能在一个 int 类型或 double 类型变量中
正确存放。
• 注意:int 类型变量和 double 类型变量所占字节数及一
个变量的几个字节的存放顺序与所用计算机的体系结
构和编译系统有关
解题原理
①字节数:
利用sizeof来获取字节数(1byte对应的16进制便是00到ff),从而得到十六进制下数据类型所占的内容
②大端,小端储存
如果将一个32位的整数0x12345678存放到一个整型变量(int)中,这个整型变量采用大端或者小端模式在内存中的存储由下表所示。
为简单起见,本文使用OP0表示一个32位数据的最高字节MSB(Most Significant Byte),使用OP3表示一个32位数据最低字节LSB(Least Significant Byte)。
③如1的十六进制表示 00 00 00 01
储存为 01 00 00 00
④ 注意如果想展现出来16进制,并且是每个字节数据的形式 要将其转变成unsigned char指针再以“%02x"的形式输出
代码
#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
template<typename T>
void showMemory(T a)
{
int c = sizeof(a);
unsigned char * p = (unsigned char *) (&a);//按字节取
while(c--)
{
printf("%02x ",*p++);
}
cout << endl;
return;
}
int main()
{
char s[100];
while(scanf("%s",s) != EOF)
{
if(strchr(s,'.') == 0)
showMemory<int>(atoi(s));
else
showMemory<double>(atof(s));
}
}