美文网首页
优雅的C语言之字节操作

优雅的C语言之字节操作

作者: redexpress | 来源:发表于2018-03-10 23:10 被阅读35次

对一个整数,怎么取每字节表示的整数的值呢?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语言排序就用到了这种思想。

相关文章

  • 优雅的C语言之字节操作

    对一个整数,怎么取每字节表示的整数的值呢?C语言可以用如下方法: 整数除法 移位操作 联合体(union) 指针 ...

  • 开发语言与python基础

    高级语言 java、PHP、c#、python、javascript、GO、ruby、c++ ==》字节码 低级语...

  • C语言之C语言的底层操作

    C语言的内存模型基本上对应了现在von Neumann(冯·诺伊曼)计算机的实际存储模型,很好的达到了对机器的映射...

  • sizeof

    sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式...

  • 通过字节码分析switch语句的执行

    先看一段代码 通过javap -c Test.class查看字节码文件 先分析下字节码文件(局部变量表和操作数栈都...

  • 第一个 C 语言编译器是怎样编写的?

    首先向C语言之父Dennis Ritchie致敬! 当今几乎所有的实用的编译器/解释器(以下统称编译器)都是用C语...

  • iOS开发系列文章[转]

    C语言 iOS开发系列--C语言之基础知识 iOS开发系列--C语言之数组和字符串 iOS开发系列--C语言之指针...

  • find

    find 路径 条件 -size -1c小于1字节 +1c大于1字节 1c等于1字节的

  • 字节对齐与大端小端与内存区域划分

    字节对齐 C语言字节对齐C语言字节对齐/7213465 大端小端 字节序(大小端)详解从高低地址和高低位开始理解(...

  • Java 字符流操作

    上篇文章Java 字节流操作介绍了java中基本的字节流操作,但是我们常常对于字符操作,如果使用字节流来实现输入输...

网友评论

      本文标题:优雅的C语言之字节操作

      本文链接:https://www.haomeiwen.com/subject/qnfifftx.html