字节的高低位交换

2023-05-16

文章目录

      • 一、字节的高低位交换
        • 1.移位操作
        • 2.蝶式交换法
        • 3.查表法

一、字节的高低位交换

问题:对一字节的数据,进行逐个高低位交换。例如0xCF(11001111B),经过0-7,1-6,2-5,3-4对应位置的交换,结果为0xF3(11110011)

1.移位操作

移位操作是对原字节通过移位操作来逐位处理的,使用另一个变量来存储交换后的结果。

unsigned char Reverse_byte(unsigned char data)
{
	unsigned char temp = 0x00;
	for(unsigned char i=0;i<8;i++)
	{
		temp=((data>>i)&0x01)|temp;
		if(i<7)
		{
			temp=temp<<1;
		}
	}
	return temp;
}

2.蝶式交换法

蝶式法交换是这样的:

unsigned char Reverse_byte(unsigned char data)
{
	data=(data<<4)|(data>>4);
	data=((data<<2)&0xcc)|((data>>2)&0x33);
	data=((data<<1)&0xaa)|((data>>1)&0x55);
	return data;
}

蝶式法交换进行推演过程:

更抽象的来说 原始位为 1 2 3 4  5 6 7 8     
data=(data<<4)|(data>>4); 之后位序为  5 6 7 8  1 2 3 4
data=((data<<2)&0xcc)|((data>>2)&0x33);   之后位序为  7 8 5 6  3 4 1 2
data=((data<<1)&0xaa)|((data>>1)&0x55);   之后位序为  8 7 6 5  4 3 2 1  

3.查表法

查表法即就是将一些值存在内存中,在需要的时候查表即可,但是也会占用额外的存储空间。查表法主要是为了节省代码的执行时序,增加执行效率。

unsigned char Reverse_byte(unsigned char c)
{
    static const unsigned char table[256] =
    {
        0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
        0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
        0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
        0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
        0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
        0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
        0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
        0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
        0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
        0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
        0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
        0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
        0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
        0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
        0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
        0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
        0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
        0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
        0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
        0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
        0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
        0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
        0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
        0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
        0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
        0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
        0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
        0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
        0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
        0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
        0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
        0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff,
    };
 
    return table[c];
}

总结:在嵌入式开发的过程中,遇到字节位的问题时通常使用蝶式交换法和查表法来实现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字节的高低位交换 的相关文章

  • PhpStorm 2018 安装及破解方法

    https blog csdn net u012278016 article details 81772566
  • mitmproxy笔记

    mitmproxy证书在http mitm it下载 或者在 mitmproxy ubuntu安装mitmproxy xff0e 可以到官网下载二进制文件 xff0e pip安装出了问题 xff0e Firfox和Chrome有各自独立的证
  • [Extensive Reading]目标检测(object detection)系列(十六)YOLOv4:平衡速度与精度

    简介 YOLOv4是YOLO之父Joseph Redmon宣布退出计算机视觉的研究之后推出的YOLO系列算法 xff0c 其作者Alexey Bochkovskiy也参与了YOLO之前系列算法 xff0c YOLOV4 Optimal Sp
  • 【Python】Python函数名后的->(横线和大于号)代表什么?

    目录 参考例子优点 参考 本文主要参考以下链接 xff1a 在def定义函数的时候 64 和 gt 代表什么 python中 gt 是什么意思python 定义函数 def 后面的 xff1e xff0c xff1a 表示的含义 例子 如下
  • Keil软件中使用“Go To Definition Of ”时提示“source browser:‘xxxx‘undefined definition/reference”

    在编写DMA的初始化函数时 xff0c 为了节约时间 xff0c 直接用了之前的模板 xff0c 但是在用DMA DeInit 函数时 xff0c 当右键点击此语句使用 Go To Definition Of 时 xff0c 该功能失效 x
  • 期末单片机复习题及答案(答案不保证全部正确95分)

    作者主页 xff1a 凉开水白菜 作者简介 xff1a 共同学习 xff0c 互相监督 xff0c 热于分享 xff0c 多加讨论 xff0c 一起进步 点赞 x1f44d 收藏 再看 xff0c 养成习惯 订阅的粉丝可通过PC端文末加我微
  • 带时间窗的车辆路径问题的多目标模因算法

    求解带时间窗车辆路径问题的多目标模因算法 1 问题描述和数学建模建立多目标模因算法 解的构造自适应局部搜索链 xff08 1 xff09 多方向局部搜索策略 xff08 2 xff09 强化的局部搜索链技术 xff08 3 xff09 自适
  • [嵌入式]stm32内部温度传感器实验

    实验概述 文章目录 实验概述一 概述二 实验平台 xff08 1 xff09 硬件平台ALIENTEK MiniSTM32 开发板 xff08 2 xff09 软件平台 三 实验过程1 STM32 内部温度传感器简介2 硬件设计3 软件设计
  • 用ipad的第一次写博客

    试着用用 用平板第一次写博客 练练手 张大炮到此一游
  • kazam的安装和使用

    kazam xff1a 介绍 xff1a 一款Linux端的录屏j兼具截图软件 主要是录屏有声音 软件 xff1a kazam 安装内容 xff1a 步骤如下 1 命令行执行语句sudo apt get install kazam 2 如果
  • VINS-Fusion 外参标定效果分析(一)

    测试流程 xff1a 在 EuRoC V1 01 easy 数据集上测试 VINS Fusion 在线外参估计效果 使用估计前后不同的外参得到两条完整轨迹 xff0c 使用 rpg trajectory evaluation 工具对比了两条
  • VINS-Fusion 外参标定效果分析(二)

    测试边缘化对外参标定的影响 参考VIN Fusion中原本的vector2double double2vector和optimization函数 xff0c 在代码中添加vector2double ex double2vector ex和o
  • keil遇到的警告汇总

    文章目录 警告 191 D 警告 191 D user Dataex c 500 warning 191 D type qualifier is meaningless on cast type 警告 xff1a 191 D xff1a 类
  • MOT:A Higher Order Metric for Evaluating Multi-object Tracking

    简介 HOTA A Higher Order Metric for Evaluating Multi object Tracking是IJCV 2020的paper xff0c 在此之前以MOTChallenge为主的多目标跟踪benchm
  • 如何更新Ubuntu系统、调整多系统启动顺序

    如何更新Ubuntu系统 调整多系统启动顺序 安装包 升级前系统前 xff0c 第一个命令或者说动作是 xff1a 以下命令需要在Ubuntu终端窗口内执行 xff0c 打开终端的快捷键是 xff1a CTRL 43 alt 43 T sp
  • git新建仓库,本地分支由master变为main

    由于一些众所周知的原因 xff0c github上传代码的默认分支由master变为了main 还是我昨天新建仓库的时候发现的 xff08 以前的仓库并不受影响 xff09 但本地分支仍旧为master xff0c 这就导致上传之后仓库有两
  • 调试笔记2:SPI+DMA

    一 内容简介 说明 xff1a 关于DMA xff0c SPI的基本知识这里不做介绍 本文只讲述SPI 43 DMA的实现 这里仅实现从外设到内存 从内存到外设也可以参考修改 目的 xff1a 使用STM32作为SPI从机接收数据 xff0
  • ANO匿名上位机V7协议&STM32

    ANO匿名上位机V7协议 amp STM32 说明 xff1a 以下程序为自己编写 xff0c 若有误欢迎各位指出 基于ANO匿名V7上位机的通信协议编写的代码 文章目录 ANO匿名上位机V7协议 amp STM32前言一 Ano V7上位
  • Makefile教程

    1 Makefile 简介 Makefile 是和 make 命令一起配合使用的 很多大型项目的编译都是通过 Makefile 来组织的 如果没有 Makefile 那很多项目中各种库和代码之间的依赖关系不知会多复杂 Makefile的组织
  • centos8安装docker错误解决

    安装出现 Problem problem with installed package buildah Last metadata expiration check 0 08 17 ago on Sat 20 Feb 2021 12 43

随机推荐

  • 深度学习环境配置记录——RTX3050

    一 下载 首先需要先了解一下深度学习环境需要的各个软件之间的关系 xff1a 从源代码构建 TensorFlow google cn 然后了解自己的电脑 NVIDIA控制面板中查看显卡驱动 xff0c 注意这个只是显卡驱动的版本 xff0c
  • RT-Thread— 知识点总结(RTT认证+面试题汇总)

    RT Thread 知识点总结 内核 RO xff1a 只读数据段 xff0c 存放程序中定义的常量 RO Size xff1a code 43 RO Data gt 占用flash大小 RW xff1a 读写数据段 xff0c 存放非0全
  • 建立本地分支与远程分支关联

    文章目录 全过程使用的指令1 1 更新 remote 版本1 2 建立一个新的分支与远程分支对应1 3 关联远程仓库分支 全过程使用的指令 span class token function git span fetch span clas
  • 遥感卫星飞行控制系统设计

    文章目录 1 卫星姿态控制模块组成2 转动惯量和地球自转角速度3 初始姿态和目标姿态4 欧拉角转四元数及四元数转欧拉角5 仿真6 绘图分析 1 卫星姿态控制模块组成 其中执行机构为零动量反作用飞轮 xff0c 此处略去 xff1b 传感器测
  • Objects Track Benchmarks

    MOT 2D MOT MOT challengeTAOCaltech Roadside PedestriansBDD100KWaymoAOTPANDAArgoVerseHiEve Multi person Motion TrackingUA
  • 树莓派4B全40管脚对应功能示意图

    以下两图中 xff0c 图1是树莓派引脚功能图 xff0c 其对应图2红框标注的部分 xff0c 黄色数字标注了对应的管脚 谢谢评论区指正 xff0c 实在抱歉 xff0c 实物图部分误用了树莓派1代的实物图 xff0c 但树莓派4b整体布
  • 【数据结构与算法】车辆路径问题(Vehicle Routing Problem,VRP)

    车辆路径问题 xff08 Vehicle Routing Problem VRP xff09 什么是车辆路径问题 车辆路线问题 xff08 VRP xff09 是指一定数量的客户 xff0c 各自有不同数量的货物需求 xff0c 配送中心向
  • 护士实习自我鉴定

    医院实习护士的评价 篇一 短短一个月的泌尿外科实习生活已接近尾声 xff0c 回顾这段时间的实习生活 xff0c 我感受很深 泌尿外科是我实习的第二站 xff0c 相对肝胆外科就不是那么的忙碌 在泌尿外科经历的业务学习是让我印象最深刻的 x
  • uni-app 实现照片水印并上传照片

    话不多说 xff0c 直接代码 lt template gt lt view class 61 34 wrap 34 gt lt u form model 61 34 model 34 ref 61 34 uForm 34 gt lt u
  • 文档服务器minio 可通过文件路径进行访问

    方法一 登陆服务器 xff0c 直接修改桶的权限 xff1a 1 2 3 4 方法二 创建桶的时候设置桶的策略 xff08 注 xff1a minio版本过高 xff0c 可能没有此方法 xff09 创建一个名为managertest的文件
  • JAVA 视频压缩

    项目依赖 开发引入Windows依赖 xff0c 生产引入linux依赖 xff1b 建议一次都引入 lt 视频压缩 gt lt dependency gt lt groupId gt ws schild lt groupId gt lt
  • Elasticsearch 7.X以上依赖自带jdk

    将 elasticsearch env 中的环境依赖修改为 set JAVA 61 ES HOME jdk bin java exe
  • JPA时间注解的使用

    JPA时间注解 64 Temporal注解 格式化时间日期 xff0c 页面直接得到格式化类型的值 64 Temporal TemporalType DATE 只代表年月日 xff0c 没有时分秒 在页面端取值 xff1a 2019 03
  • python 无人机、飞机轨迹(含姿态角)可视化方法

    无人机 飞机轨迹 含姿态角 可视化方法 目标 xff1a 在三维直角坐标系中画出包含无人机位置pos 偏航角yaw 俯仰角pitch 滚转角roll等姿态的飞行轨迹 思路 xff1a 同时建立机体坐标系和直角坐标系 xff0c 飞机的所有点
  • 【报错记录】import keras时出现AlreadyExistsError: Another metric with the same name already exists.

    AlreadyExistsError Another metric with the same name already exists AlreadyExistError 已存在另一个同名度量 keras版本与tensorflow版本不对应
  • vscode 选择python解释器

    当python环境不止一个时 xff0c vscode可以选择指定的python解释器 xff0c 具体为 xff1a vscode设置中打开Command Palette 键入 Python Select Interpreter
  • 统计代码量方法

    文章目录 方法一 xff1a 直接使用正则表达式方法二 xff1a 使用 96 cloc 96 文件2 1 在Windows下使用代码量统计工具 不设置环境变量 设置环境变量 2 2 96 Linux 96 下使用代码量统计工具 方法三 x
  • Makefile教程(掌握这里足够)

    众所周知 xff0c 在Linux环境下进行项目开发那就少了使用make来构建和管理自己的工程 如果想要更加深入的学习 xff0c 我在这里推荐一本书 https www jianguoyun com p DZWKrLIQjKL5Bxi0z
  • Docker:Docker的安装与镜像加速

    文章目录 一 Docker教程1 1 Docker的优点1 2 Docker容器技术和传统虚拟机技术的性能比较1 3 Docker的相关链接 二 Docker的安装2 1 使用官方安装脚本自动安装2 2 使用Docker仓库进行安装 三 D
  • 字节的高低位交换

    文章目录 一 字节的高低位交换1 移位操作2 蝶式交换法3 查表法 一 字节的高低位交换 问题 xff1a 对一字节的数据 xff0c 进行逐个高低位交换 例如0xCF 11001111B 经过0 7 1 6 2 5 3 4对应位置的交换