[C/C++] 判断电脑存储模式(大端/小端)

// ===== 1. 指针转换:int指针转换为char指针 =====
#include <iostream>
int main() {
    int a = 0xaabbccdd;
    char* p = (char*)&a;
    if (*p == 0xaa) {
        std::cout << "大端" << std::endl;
    } else {
        std::cout << "小端" << std::endl;
    }
    return 0;
}

// ===== 指针转换简洁丑陋版 =====
#include <iostream>
int main() {
    int a = 1;
    std::cout << ((*(char*)&a) ? "小端" : "大端")  << std::endl;
    return 0;
}

// ===== 2. 联合体 =====
#include <iostream>
union {
    char a;    // 最低地址:1个字节
    int b;    // 较高地址:4个字节
} c;
int main() {
    c.b = 1;
    std::cout << (c.a ? "小端" : "大端") << std::endl;
    return 0;
}

 

========== 以下内容太啰嗦了,请忽略==========

C语言版本:

#include <stdio.h>
#include <inttypes.h>

int main() {
    uint32_t num = 0xaabbccdd;                      // 字节方向:高->低,也就是aa是高字节,dd是低字节
    uint8_t *point = (uint8_t*)(&num);
    for (int i = 0; i < sizeof(num); ++i) {         // 低地址开始输出
        printf("%hx", point[i]);
    }
    /**
     * 大端(高字节存放在低地址)输出为:   aabbccdd
     * 小端(低字节存放在低地址)输出为:   ddccbbaa
     */ 
    return 0;
}

 

C++版本:

#include <iostream>
#include <inttypes.h>
using namespace std;

int main() {
    uint32_t num = 0xaabbccdd;                      // 字节方向:高->低,也就是aa是高字节,dd是低字节
    uint8_t *point = (uint8_t*)(&num);
    for (int i = 0; i < sizeof(num); ++i) {         // 低地址开始输出
        cout << hex << (int)point[i];
    }
    /**
     * 大端(高字节存放在低地址)输出为:   aabbccdd
     * 小端(低字节存放在低地址)输出为:   ddccbbaa
     */ 
    return 0;
}

 

posted @ 2023-04-03 11:13  小贼的自由  阅读(58)  评论(0编辑  收藏  举报