如何检查系统是大端还是小端?
Answers:
(char)n == 1
吗?为什么我们必须获取地址,将其转换为char
指针然后取消引用?不会使用隐式完成(char)n
吗?
在Python中:
from sys import byteorder
print(byteorder)
# will print 'little' if little endian
另一个使用联合的C代码
union {
int i;
char c[sizeof(int)];
} x;
x.i = 1;
if(x.c[0] == 1)
printf("little-endian\n");
else printf("big-endian\n");
这与belwood使用的逻辑相同。
在C ++ 20中使用std::endian
:
#include <bit>
#include <iostream>
int main() {
if constexpr (std::endian::native == std::endian::little)
std::cout << "little-endian";
else if constexpr (std::endian::native == std::endian::big)
std::cout << "big-endian";
else
std::cout << "mixed-endian";
}
在Linux中,
static union { char c[4]; unsigned long mylong; } endian_test = { { 'l', '?', '?', 'b' } };
#define ENDIANNESS ((char)endian_test.mylong)
if (ENDIANNESS == 'l') /* little endian */
if (ENDIANNESS == 'b') /* big endian */
使用宏,
const int isBigEnd=1;
#define is_bigendian() ((*(char*)&isBigEnd) == 0)
在C中
#include <stdio.h>
/* function to show bytes in memory, from location start to start+n*/
void show_mem_rep(char *start, int n)
{
int i;
for (i = 0; i < n; i++)
printf("%2x ", start[i]);
printf("\n");
}
/*Main function to call above function for 0x01234567*/
int main()
{
int i = 0x01234567;
show_mem_rep((char *)&i, sizeof(i));
return 0;
}
当上述程序在小字节序计算机上运行时,给出“ 67 45 23 01”作为输出,而如果在大字节序计算机上运行,则给出“ 01 23 45 67”作为输出。