优雅的C语言之字节操作

对一个整数,怎么取每字节表示的整数的值呢?C语言可以用如下方法:

  • 整数除法
  • 移位操作
  • 联合体(union)
  • 指针

其中,后两种方法是C特有的。下面是这两种的方法的演示

使用联合体

#include 
#include 

int main(int argc, const char * argv[]) {
  union {
    uint16_t i;
    char byte[2];
  } u;
  u.i = 0x0102;
  if (u.byte[0] == 1 && u.byte[1] == 2) {
    printf("big-endian\n");
  } else {
    printf("little-endian\n");
  }
  return 0;
}

这种方法不仅方便操作字节,通过C语言的位段(bit-field),我们可以方便的操作几位(bit)二进制。

使用指针

#include 
#include 

int main() {
  uint16_t i = 0x0102;
  char *p = (char *)(&i);
  if (*p == 1 && *(p + 1) == 2) {
    printf("big-endian\n");
  } else {
    printf("little-endian\n");
  }
  return 0;
}

通过更改指针类型,可方便访问整数,我前面的文章类似qsort支持多数据类型的C语言排序就用到了这种思想。

你可能感兴趣的:(优雅的C语言之字节操作)