优雅的C语言之字节操作

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

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

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

使用联合体

#include <stdio.h>
#include <stdint.h>

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 <stdio.h>
#include <stdint.h>

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语言排序就用到了这种思想。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容