在C ++程序中以编程方式检测字节顺序
是否有程序化的方法来检测你是否在大端或小端架构? 我需要能够编写将在Intel或PPC系统上执行的代码,并使用完全相同的代码(即无条件编译)。
我不喜欢基于类型双击的方法 - 它通常会被编译器警告。 这正是工会的目的!
int is_big_endian(void)
{
union {
uint32_t i;
char c[4];
} bint = {0x01020304};
return bint.c[0] == 1;
}
这个原则与其他人提出的类型案例相同,但这更清晰 - 根据C99,保证是正确的。 与直接指针转换相比,gcc更喜欢这一点。
这比在编译时修复字节序要好得多 - 对于支持多种体系结构的操作系统(例如Mac os上的胖二进制文件),这对ppc / i386都有效,否则很容易把它弄糟。
你可以通过设置一个int和遮蔽位来实现,但最简单的方法可能是使用内置的网络字节转换操作(因为网络字节顺序总是大端)。
if ( htonl(47) == 47 ) {
// Big endian
} else {
// Little endian.
}
位摆动可能会更快,但这种方式很简单,直接,并且不可能搞砸。
请看这篇文章:
这里有一些代码来确定你的机器是什么类型的
int num = 1;
if(*(char *)&num == 1)
{
printf("nLittle-Endiann");
}
else
{
printf("Big-Endiann");
}
链接地址: http://www.djcxy.com/p/61893.html
上一篇: Detecting endianness programmatically in a C++ program
下一篇: SQL Pane view within Visual Studio 2012 Database Project