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

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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Python语言实验
  • ¥15 SAP HANA SQL 增加合计行
  • ¥20 用C#语言解决一个英文打字练习器,有偿
  • ¥15 srs-sip外部服务 webrtc支持H265格式
  • ¥15 在使用abaqus软件中,继承到assembly里的surfaces怎么使用python批量调动
  • ¥15 大一C语言期末考试,求帮助🙏🙏
  • ¥15 ch340驱动未分配COM
  • ¥15 Converting circular structure to JSON
  • ¥30 Hyper-v虚拟机相关问题,求解答。
  • ¥15 TSM320F2808PZA芯片 Bootloader