与小代码的结果相比,带有 boost 的字节序检查不同

Abr*_*ile 3 c++ boost endianness

大家好 我正在做一些初步检查,看看我的系统是大端还是小端。在 Linux 中,默认情况下它应该是 little-endian,但我只是想仔细检查一下。我使用了两种方法

  1. 使用 boost endian 支持
  2. 使用我在网上找到的一些代码

我使用了以下静态断言

BOOST_STATIC_ASSERT(!BIG_ENDIAN);
Run Code Online (Sandbox Code Playgroud)

在编译时失败,所以我虽然..mmhh...我的系统是大端吗?这是我的错误

error: invalid application of ‘sizeof’ to incomplete type 
boost::STATIC_ASSERTION_FAILURE<false>’ 
Run Code Online (Sandbox Code Playgroud)

如果我使用类似下面的代码进行测试,它会确认系统是小端的。你知道我做错了什么,我正确使用了 Boost 宏吗?

bool is_big_endian_v3(){

    长 x = 0x34333231;
    char *y = (char *) &x;

    if(std::strncmp(y,"1234",4)){
        printf("大端");
        返回真;
    }别的{
        printf("小端");
        返回假;
    }
    std::runtime_error ex("我不能在这里");
    扔前;

}

ali*_*ick 6

Boost 库已更改,上一个答案中的代码现在(2019 年 7 月)生成弃用消息并提出以下建议:

#include <boost/predef/other/endian.h>
#include <stdlib.h>
#include <iostream>

int main()
{
#if BOOST_ENDIAN_BIG_BYTE
    std::cout << "Big endian." << std::endl;
#elif BOOST_ENDIAN_LITTLE_BYTE
    std::cout << "Little endian." << std::endl;
#else
    std::cout << "Unknown endian." << std::endl;
#endif
    exit(EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)