【问题标题】:big endian or little endian? [duplicate]大端还是小端? [复制]
【发布时间】:2011-07-22 21:30:34
【问题描述】:

可能重复:
How to check whether a system is big endian or little endian?

如何知道正在使用的机器是大端还是小端?有没有我可以写的代码来做到这一点?

【问题讨论】:

标签: objective-c c


【解决方案1】:
int main()
{
  unsigned int i = 0x12345678; // assuming int is 4 bytes.
  unsigned char* pc = &i;

  if (*pc == 0x12)
    printf("Big Endian. i = 0x%x, *pc = 0x%x\n", i, *pc);
  else if (*pc == 0x78)
    printf("Little Endian. i = 0x%x, *pc = 0x%x\n", i, *pc);

  return 0;
}

【讨论】:

  • +1 似乎这会比接受的答案更快。
【解决方案2】:

下面的代码应该会给你答案。

#include <stdio.h>

int main() {
  long x = 0x44434241;
  char *y = (char *) &x;

  if(strncmp(y,"ABCD",4)){
   printf("Big Endian\n");
  }else{
   printf("little Endian\n");
  }
}

解释

little endian 中,4 个字节存储为[4th, 3rd , 2nd, 1st]0x41A0x42B 等等。这个字节流被解释为字符串,使用strncpy我们确定字节在机器中的实际排列方式,并决定它的little or big endian

【讨论】:

  • 虽然它确实有效,但它的缺点是使用函数调用。只需解除对 char 指针的引用,从而查看第一个“字符”就足够了。
  • 这个例子比维基百科的文章更容易理解。我已经读了很多遍了,但这几行代码基本上概括了我需要知道的一切。
猜你喜欢
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 2010-09-26
  • 2011-05-10
  • 2013-02-27
  • 2011-02-06
  • 1970-01-01
相关资源
最近更新 更多