海雨一梦 2018-12-20 09:30 采纳率: 100%
浏览 750
已采纳

c语言编程:字节查看器

任务描述
对于输入的按int型、float型、double型、char型数组这四种数据类型存储的数据,分别将该数据按正常形式输出以及按字节以十六进制形式输出。十六进制的字母请用大写的A,B,C,D,E,F。其中,int型、float型、double型数据按先输出高位字节,从高位字节向低位字节输出的形式。字符串型则直接按字符顺序逐字节输出。
输入
有4行,第1行是一个整数,以int型数据存储。第2行是一个带小数点的实数,以double型存储,第2行是一个带小数点的实数,以double型存储,第3行是长度为不超过100字符的英文字符串,以char型数组存储。
输出
输出4组结果每组输出2行。

第1组:第1行输出int型整数本身,第2行按字节输出该int型数据4组十六进制值。

第2组:第1行输出float型实数本身,第2行按字节输出该实数的4组十六进制值。

第3组:第1行输出double型实数本身,第2行按字节输出该实数的8组十六进制值。

第4组:第1行输出字符串本身,第2行按字节输出该字符串的每个字符的十六进制值。

每组数据的2行输出之后有空行。每两个十六进制值之间用空格分隔。

输入举例
123456
123.456
123.456
123456 and 123.456 is a number!
输出举例
123456
00 01 E2 40

123.456001
42 F6 E9 79

123.456000
40 5E DD 2F 1A 9F BE 77

123456 and 123.456 is a number!
31 32 33 34 35 36 20 61 6E 64 20 31 32 33 2E 34 35 36 20 73 20 61 20 6E 75 6D 62 65 72 21

  • 写回答

1条回答 默认 最新

  • threenewbee 2018-12-20 02:52
    关注
    #include "stdio.h"
    #include "string.h"
    
    int islittle()
    {
        int i = 1;
        return i == (int)*((char *)&i);
    }
    
    #define LITTLEENDIAN islittle() 
    
    void printbytes(void * ptr, size_t size, int rev = 0)
    {
        int start = 0;
        int end = size;
        int step = 1;
        if (rev)
        {
            start = size - 1;
            end = -1;
            step = -1;
        }
        for (int i = start; i != end; i += step)
        {
            int val = ((unsigned char *)ptr)[i];
            char out[3];
            if (val / 16 > 9) out[0] = val / 16 + 'A' - 10; else out[0] = val / 16 + '0';
            if (val % 16 > 9) out[1] = val % 16 + 'A' - 10; else out[1] = val % 16 + '0';
            out[2] = '\0';
            printf("%s ", out);
        }
        printf("\n");
    }
    
    int main()
    {
        int a;
        float b;
        double c;
        char d[101];
        scanf_s("%d", &a);
        scanf_s("%f", &b);  
        scanf_s("%lf", &c);
        fflush(stdin);
        scanf_s("%[^\n]", &d[0], 100);
        printf("%d\n", a);
        printbytes((void *)&a, sizeof(int), LITTLEENDIAN);
        printf("%f\n", b);
        printbytes((void *)&b, sizeof(float), LITTLEENDIAN);
        printf("%lf\n", c);
        printbytes((void *)&c, sizeof(double), LITTLEENDIAN);
        fflush(stdin);
        printf("%s\n", d);
        printbytes((void *)&d[0], sizeof(char) * strlen(d), 0);
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 求数学坐标画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站