gpt4 book ai didi

c - C 中泛型数据类型值的十六进制表示

转载 作者:行者123 更新时间:2023-12-04 13:33:22 25 4
gpt4 key购买 nike

<分区>

我试图用 C 编写一个函数来打印出通用数据类型值的十六进制表示。我的第一次尝试失败了,第二次成功了,为什么?

  1. 第一次尝试

    #include <stdio.h>

    /* prints out the hexadecimal representation of a generic value */
    void show_hex(void*,size_t);

    int main() {
    int i = 12345;
    short s = 32767; /* 2^15 - 1 */
    show_hex(&i, sizeof(int));
    show_hex(&s, sizeof(short));
    return 0;
    }

    void show_hex(void *x, size_t sz){
    char *cx = x;
    int i;
    printf("0x");
    for (i = 0; i < sz; ++i)
    printf("%.2x", cx[i]);
    printf("\n");
    }

    输出:0x39300000 对于 int 情况,如小端计算机 (Mac OSX) 上预期的那样。对于 short 情况,它输出 0xffffffff7f 而不是 0xff7f

  2. 第二次尝试:

    typedef unsigned char *byte_pointer;

    int main() {
    int i = 12345;
    short s = 32767; /* 2^15 - 1 */
    show_hex((byte_pointer)&i, sizeof(int));
    show_hex((byte_pointer)&s, sizeof(short));
    return 0;
    }

    void show_hex(byte_pointer x, size_t sz){
    int i;
    printf("0x");
    for (i = 0; i < sz; ++i)
    printf("%.2x", x[i]);
    printf("\n");
    }

    对于这两种情况,此程序都按预期输出,int: 0x39300000短:0xff7f

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com