/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param n int整型
 * @return int整型
 */
// 使用指针解析int变量的字节并判断字节序
int checkIntEndian(int input) {
    // 将int指针强制转换为unsigned char指针,用于按字节访问
    unsigned char* bytes = (unsigned char*)&input;
    int i;
    int int_size = sizeof(int);  // 获取当前系统中int的字节数
    /* */
    // 打印变量的字节存储情况(从低地址到高地址)
    printf("输入变量的字节存储(低地址到高地址):\n");
    for (i = 0; i < int_size; i++) {
        printf("偏移 %d: 0x%02x\n", i, bytes[i]);
    }
    // 提取变量的最低有效字节(小端模式下应出现在最低地址)
    unsigned char least_significant = input & 0xff;
    // 提取变量的最高有效字节(大端模式下应出现在最低地址)
    unsigned char most_significant = (input >> (8 * (int_size - 1))) & 0xff;
    // 判断系统字节序
    if (bytes[0] == least_significant) {
        printf("当前系统为小端模式(低字节存低地址)\n");
        return 1;
    } else if (bytes[0] == most_significant) {
        printf("当前系统为大端模式(高字节存低地址)\n");
        return 0;
    } else {
        printf("无法确定字节序\n");
        return -1;
    }
}
// 使用联合体解析int变量的字节并判断字节序
// 定义联合体,用于拆分int变量的字节
union IntBytes {
    int num;               // 待解析的整数
    unsigned char bytes[sizeof(int)];  // 存储整数的每个字节(长度自适应int大小)
};
// 判断系统字节序并展示输入变量的字节分布
void Union_checkIntEndian(int input) {
    union IntBytes ib;
    ib.num = input;  // 将输入的int变量存入联合体
    // 打印变量的字节存储情况(从低地址到高地址)
    printf("输入变量的字节存储(低地址到高地址):\n");
    for (int i = 0; i < sizeof(int); i++) {
        printf("偏移 %d: 0x%02x\n", i, ib.bytes[i]);
    }
    // 判断系统字节序(以0x12345678为参考模式)
    // 实际可通过任意值的字节分布规律推断
    if (ib.bytes[0] == (input & 0xff)) {
        // 低地址存储低字节(小端模式)
        printf("当前系统为小端模式(低字节存低地址)\n");
    } else if (ib.bytes[0] == (input >> (8 * (sizeof(int) - 1)) & 0xff)) {
        // 低地址存储高字节(大端模式)
        printf("当前系统为大端模式(高字节存低地址)\n");
    } else {
        printf("无法确定字节序\n");
    }
}
int judge(int n ) {
    // write code here
    return checkIntEndian(n); //指针方式能自适应不同系统中int类型的长度(4 字节或 8 字节),具有良好的跨平台兼容性。
}
题目备注有问题,大端和小端输出结果反了。

 京公网安备 11010502036488号
京公网安备 11010502036488号