美文网首页
在编译阶段翻转字节

在编译阶段翻转字节

作者: 一个灰 | 来源:发表于2018-09-22 14:09 被阅读0次

在解析协议的时候,需要将一个大端字序的整数,转成小端字序,比如内存中有[1,2,3,4]四个字节,我们需要翻转成[4,3,2,1]。传统做法要么循环,要么硬编码。那么如果现在有位数不定的情况下需要翻转呢?

这时候C++的模版函数大显身手了,请看如下代码(u8是8位无符号整数类型)

template <int N>
inline void reverse(u8 *a, u8 *b)
{
    *a = *b;
    reverse<N - 1>(a + 1, b - 1);
}
template <>
inline void reverse<1>(u8 *a, u8 *b)
{
    *a = *b;
}

模版参数除了常见的替换类型以外,还有这种传递一个整数常量的方式。当我们调用这个reverse函数的时候,编译器会在编译阶段展开函数,由于内部我们递归调用了reverse,编译器会递归的展开这个函数。

比如我们调用了reverse<4>(a,b+3):a是翻转后的字节地址,b是原始字节地址。
那么相当于下面的代码

*a = *b
*(a+1) = *(b-1)
*(a+2) = *(b-2)
*(a+3) = *(b-3)

这就是C++模版函数的妙用,希望给你启发。

相关文章

  • 在编译阶段翻转字节

    在解析协议的时候,需要将一个大端字序的整数,转成小端字序,比如内存中有[1,2,3,4]四个字节,我们需要翻转成[...

  • 深入理解JVM之编译优化

    JDK在源码编译阶段将源码编译为JVM字节码,JVM字节码是一种平台无关的中间代码方式,要由JVM在运行期间对其进...

  • 类加载器与双亲委派模型

    类加载器 在java语言编译运行阶段,首先会把我们写的.java程序编译成二进制的字节码文件.class,后面需要...

  • 鸿蒙代码配置混淆

    一、前言 Java代码会被编译成字节码,字节码非常容易被反编译,一旦字节码被反编译,源码也就泄露了。为了很好的保护...

  • 详解 JVM 字节码(2)

    什么是字节码,为什么需要字节码编译 JVM 编译成机器码, 我们看一看 Java 编译过程 java 源码 编译为...

  • luajit

    编译为字节码

  • 程序性能优化

    Javac编译器优化 编译过程大致分为3个阶段: 解析与填充符号表过程 插入式注解处理器的注解处理过程 分析与字节...

  • JVM

    JVM 基础-类字节码详解 多语言编译为字节码在 JVM 运行 Java 字节码文件-- Class文件的结构属性...

  • Effect JAVA -机制与原理

    JAVA字节码.Class解析 不论该字节码文件来自何方,由哪种编译器编译,甚至是手写字节码文件,只要符合java...

  • 二、JVM系列(从源代码到机器码,发生了什么?)

    前端编译器:源码到字节码 前端编译器也就是我们说的JavaC编译器,它将Java源代码编译成了字节码(class文...

网友评论

      本文标题:在编译阶段翻转字节

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