ECNU OJ 2822 内存显示

一个 int 类型变量或 double 类型变量在连续几个字节的内存中存放。读取数值时,当数值中包含小数点时类型为 double,否则类型为 int。将读入的数值存放在 int 类型变量或 double 类型变量中。以十六进制格式(a-f 字母采用小写形式)输出相应变量的连续的每个字节的值。

读入的数据保证能在一个 int 类型或 double 类型变量中正确存放。

注意:int 类型变量和 double 类型变量所占字节数以及一个变量的几个字节的存放顺序与所用计算机的体系结构和编译系统有关。

Input

每一行包含一个数值

Output

每行对应一个数据,每个字节后面都要输出一个空格

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void solveint(int n);
void solvedouble(double d);

int main()
{
    char s[31];
    while (~scanf("%s",s)){
        if (strchr(s,'.') == 0)
                solveint(atoi(s));
        else 
            solvedouble(atof(s));
        return 0;
    }
}

void solveint(int n)
{
    int c = sizeof(n);
    unsigned char *p=(unsigned char*) &n;
    while (c--)
        printf("%02x", *p++);
    putchar('\n');
}

void solvedouble(int d)
{
    int c = sizeof(d);
    unsigned char *p=(unsigned char*) &d;
    while (c--)
        printf("%02x", *p++);
    putchar('\n');
}

 

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注