博客專欄

        EEPW首頁 > 博客 > linux c之hexdump的實現(xiàn)

        linux c之hexdump的實現(xiàn)

        發(fā)布人:電子禪石 時間:2021-05-25 來源:工程師 發(fā)布文章
        linux c之hexdump的實現(xiàn)



        #include <stdio.h>
        #include <assert.h>
        #include <stdlib.h>
        #include <inttypes.h>
         
         
        //http://androidxref.com/7.1.1_r6/xref/external/avahi/avahi-compat-howl/text-test.c#33
        static void hexdump(const void* p, size_t size) {
            const uint8_t *c = p;
            assert(p);
         
            printf("Dumping %u bytes from %p:\n", size, p);
         
            while (size > 0) {
                unsigned i;
         
                for (i = 0; i < 16; i++) {
                    if (i < size)
                        printf("%02x ", c[i]);
                    else
                        printf("   ");
                }
         
                for (i = 0; i < 16; i++) {
                    if (i < size)
                        printf("%c", c[i] >= 32 && c[i] < 127 ? c[i] : '.');
                    else
                        printf(" ");
                }
         
                printf("\n");
         
                c += 16;
         
                if (size <= 16)
                    break;
         
                size -= 16;
            }
        }
         
        //默認8的倍數(shù)對齊 4+1+10=15=>16
        typedef struct Person
        {
            int age;
            char sex;
            char city[10];
        } Person;
         
        //默認8的倍數(shù)對齊 4+4+10=18=>24
        typedef struct Student2
        {
            Person* parent; //4 //存在指針到文件中的話,指針對應的數(shù)據(jù)會丟失,因為你只存儲了他的地址,沒有保存他的數(shù)據(jù)
            int weight;//4
            char classroom[10];//10+6
        } Student2;
         
        int main(void)
        {
         
            Person person;
            person.age=26;
            person.sex='m';
            strcpy(person.city,"shenzhen");
         
             hexdump(&person,sizeof(person));
         
            Student2 stu;
            stu.parent=&person;//16
            stu.weight=140;
            memset(stu.classroom,0,sizeof(stu.classroom));//清零,否則是隨機值
            strcpy(stu.classroom,"204");
         
            hexdump(&stu,sizeof(stu));
         
            FILE* fp=fopen("student2.struct.bin","wb");
            fwrite(&stu,sizeof(stu),1,fp);
            fclose(fp);
            printf("write_Student2_struct sizeof=%d ok!\n",sizeof(stu));//24
         
            printf("Hello World!\n");
            return 0;
        }

        (10條消息) linux c之hexdump的實現(xiàn)_云守護的專欄-CSDN博客

        *博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。



        關鍵詞: C

        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 耒阳市| 德庆县| 广灵县| 裕民县| 永年县| 靖西县| 南阳市| 宜君县| 积石山| 沽源县| 青州市| 长兴县| 濉溪县| 新昌县| 凉城县| 武夷山市| 建宁县| 葫芦岛市| 安图县| 台南县| 龙胜| 道孚县| 民权县| 公主岭市| 都安| 富阳市| 武乡县| 大英县| 台北县| 东源县| 壶关县| 湛江市| 静海县| 肃北| 胶南市| 宁夏| 富蕴县| 长丰县| 电白县| 合川市| 六盘水市|