通过显示字节判断小端法

#include <stdio.h>

typedef unsigned char *byte_pointer; //将数据类型byte_pointer定义为一个指向类型为unsigned char的对象的指针

void show_bytes(byte_pointer start, size_t len) { //输入为一个字节序列的地址,和一个字节数
    size_t i;
    for (i = 0; i < len; i++)
        printf("%.2x", start[i]); //%.2x表明整数必须用至少两个数字的十六进制输出
    printf("\n");
}

void show_int(int x) {
    show_bytes((byte_pointer) &x, sizeof(int)); //读入int x的地址和字节数,然后通过调用函数show_bytes来输出字节序列的地址
}

void show_float(float x) {
    show_bytes((byte_pointer) &x, sizeof(float));//读入float x的地址和字节数,然后通过调用函数show_bytes来输出字节序列的地址
}

void show_pointer(void *x) {
    show_bytes((byte_pointer) &x, sizeof(void *));//读入void *x的地址和字节数,然后通过调用函数show_bytes来输出字节序列的地址
}

void test_show_bytes(int val) {
    int ival = val;
    float fval = (float) ival;
    int *pval = &ival;
    show_int(ival);
    show_float(fval);
    show_pointer(pval);
}

int main(void) {
    int val = 0x87654321;
    byte_pointer valp = (byte_pointer) &val;
    printf("%d\n", sizeof(valp));//valp的长度为8
    show_bytes(valp, 1); //valp为指向val的指针,输出16进制,能输出4位,至少输出2个16进制数
    show_bytes(valp, 2); //val的前两个十六进制数是2143,顺序是反的,说明是用的小端法
    show_bytes(valp, 3); //输出至少3次2个十六进制数,顺序也是相反,小端法
    show_bytes(valp, 4);

}

输出:
8
21
2143
214365
21436587
posted @ 2021-11-08 00:16  里列昂遗失的记事本  阅读(85)  评论(0)    收藏  举报