大端小端和位运算

devtools/2025/3/26 4:31:16/

一.大端小端含义和判断

大端模式:按照高字节存低地址,低字节存高地址,先访问高地址。

小端字节序: 按照低字节存低地址,高字节存高地址,先访问低地址。

1.如何判断平台是小端还是大端?

分析:一个char字符一个字节,一个short 两个字节;

    char s[2] = {0, 1};unsigned short *ret = (unsigned short *)(s);printf("ret:%d\n", *ret);

因为我们已经给出s[2],并且已经确定了这两个字节在内存中的存储顺序就是:

相对的地址:  (低地址)    0x00 0x01        0x02 0x03      高地址

字节序                             【0000 0000】【0000 0001】

小端模式下,内存中从低位开始读,转换为二进制就是:

0000 0001 0000 0000

表示为十进制就是256

大端模式下,内存中从高地址开始读,转换为二进制就是: 

0000 0000 0000 0001

表示十进制就是1

读出来的数据转换为二进制时,低位放在右边,高位放在左边,初学者很容易混淆比如我。

二.位运算 

这里假设有unsigned int 值 num,转换为二进制为:

num 二进制:0100 0001 1000 0010 0011 1000 1000 0101  

操作 :num>>16       

num 转换后:0000 0000 0000 0000 0100 0001 1000 0010

操作: num<<16

num转换后: 0011 1000 1000 0101 0000 0000 0000 0000

按位与 &

  • 当两个对应的位都为 1 时,结果为 1;否则结果为 0

按位或 |

 

  • 当至少有一个相应位为 1 时,结果为 1;当两个位都为 0 时,结果为 0

举例:

    unsigned int tmp;fread(&tmp, 1, 3, fp);*u24 = (((tmp >> 16) & 0xFF) | ((tmp << 16) & 0xFF0000) | (tmp & 0xFF00));

 从文件中读取的3个字节,tmp中多余的高位字节被0填充;

(tmp >>16) 留下了高 8 位

(tmp <<16)留下了低 8 位变成了高 8 位

为什么要& 0xFF 0xFF0000 0xFF00 ,这是为了确保,当tmp不符合预期或者数据源中的内容无效的时候,确保操作的结果符合我们期望的格式。

这个操作是将高8位和低8位互换,一般用于3个字节的小端字节序转换到大端字节序。

 


http://www.ppmy.cn/devtools/170733.html

相关文章

【江西棒垒球】如何参加奥运会·棒球5号位

以棒球运动为例&#xff0c;关于棒球运动员参加奥运会的具体路径和要求的系统说明&#xff1a; 一、基础资格路径 1. 国家队选拔机制 需入选本国奥运会棒球代表队&#xff08;棒球为团体项目&#xff0c;无个人参赛资格&#xff09; 国家棒球协会根据国际赛事表现、国内联赛…

一文读懂 GPT 与 BERT:预训练逻辑及差异剖析

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;预训练语言模型GPT&#xff08;Generative Pretrained Transformer&#xff09;和 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;作为杰出代表&#xff0c;备受关注。本文将…

用java写一个简易的本地聊天室

发送端 import java.io.IOException; import java.net.*; import java.util.Scanner;public class send {public static void main(String[] args) throws IOException {//1.创建对象datagramSocket的对象DatagramSocket ds new DatagramSocket();//2.打包数据Scanner sc ne…

stm32标准库开发需要的基本文件结构

使用STM32标准库&#xff08;STM32 Standard Peripheral Library&#xff0c;SPL&#xff09;开发时&#xff0c;项目中必须包含一些必要的文件&#xff0c;这些文件确保项目能够正常运行并与MCU硬件交互。以下详细说明&#xff1a; 一、标准库核心文件夹说明 使用标准库开发S…

HTML5 SVG 学习笔记

接将SVG元素嵌入HTML页面中。SVG元素是SVG图形的容器。 示例&#xff1a;SVG圆形 HTML复制 <svg xmlns"http://www.w3.org/2000/svg" version"1.1"><circle cx"100" cy"50" r"40" stroke"black" stro…

Touch Diver:Weart为XR和机器人遥操作专属设计的触觉反馈动捕手套

在虚拟现实&#xff08;VR&#xff09;和扩展现实&#xff08;XR&#xff09;领域&#xff0c;触觉反馈技术正逐渐成为提升沉浸感和交互体验的重要因素。Weart作为这一领域的创新者&#xff0c;凭借其TouchDIVER Pro和TouchDIVER G1触觉手套&#xff0c;为用户带来了高度逼真的…

Aider的Repo Map功能

在使用 Aider 时&#xff0c;Repo Map 默认只包含当前会话中明确指定的文件&#xff08;通过命令行传入的 fnames 或交互中添加的文件&#xff09;。要把整个项目的所有文件添加到 Repo Map 中&#xff0c;需要调整 Aider 的行为&#xff0c;让它扫描整个代码库并将所有文件纳入…

清晰易懂的 Swift 安装与配置教程

初学者也能看懂的 Swift 安装与配置教程 本教程将手把手教你如何在 macOS 系统上安装 Swift&#xff0c;配置依赖包缓存位置&#xff0c;并指出新手容易踩坑的细节。即使你是零基础小白&#xff0c;也能快速上手&#xff01; 一、安装 Swift&#xff08;macOS 环境&#xff09…