C-转换字节序

1 union 版本

int ToggleEndian(int original){
    union {
        char c[4];
        int i;
    } value = {.i = original};
    char temp = value.c[0];
    value.c[0] = value.c[3];
    value.c[3]=temp;
    temp = value.c[1];
    value.c[1]=value.c[2];
    value.c[2]=temp;
    return value.i;
}
int main() {
    PRINT_INT(isBigEndian());
    int ogriginal =0x12345678;
    PRINT_HEX(ToggleEndian(ogriginal));
    return 0;
}

2 指针版本

int toggleEndianPtr(int original) {
    char *p = (char *) &original;
    char temp = p[0];
    p[0] = p[3];
    p[3] = temp;
    p[1] = p[2];
    p[2] = temp;
    return original;
}

int main() {
    PRINT_INT(isBigEndian());
    int original = 0x12345678;
    PRINT_HEX(toggleEndian(original));
    PRINT_HEX(toggleEndianPtr(original));
    return 0;
}