大小端问题

2023-05-16

本来我想说,Windows平台一般是小端,Linux一般是大端;

但是,

实际上大小端CPU架构有关,当然和系统也可能有关,可以配置大小端;对于CPU框架,ARM是小端,目前移动端CPU也是小端,stm32这类的嵌入式CPU一般是大端;

我看网上的有些文章是这么描述的:

大端:高位存在低地址,低位存在高地址;
小端:高位存在高地址,低位存在低地址;

刚开始看的时候,还挺认可的,然而仔细想想,不太对劲,描述有问题,文章作者对 ‘位’ 和 ‘字节’ 已经混淆了,应该换成:

大端:高字节存在低地址,低字节存在高地址;
小端:高字节存在高地址,低字节存在低地址;

以下举个例子

// 为了方便看内存,我们定义的值使用十六进制
// 切记0xaabbccdd并非nValue的地址,而是nValue的值,转换成十进制是‭2864434397‬
// 自己用程序员计算器验证下

unsigned int nValue = 0xaabbccdd;

// 此处为了看内存,假定内存地址从右到左 为 低地址到高地址
// 基础知识:
//    int 目前的Windows系统下为 4 字节
//    1 个字节有 8 个位,每个字节最大可表示为 0xFF

                高地址 《《《《《《 低地址
字节编号          3     2     1     0
小端nValue      0xaa   0xbb  0xcc  0xdd
大端nValue      0xdd   0xcc  0xbb  0xaa

利用联合体判断大小端

//定义联合体
union
{
    unsigned int nValue;
    unsigned char aValue;
}Test;

//判断是否属于小端
//原理就是小端的存储方式为低字节存在低地址,联合体的特性是所有字段共用内存块
//即aValue可堪称nValue的低字节
bool IsLittle()
{
    Test t;//初始值为 0x00000000
    t.nValue = 1;//最后值为0x00000001
    return (t.aValue == 1);

    // 若为小端  则内存如下
    //      高地址 《《《《《《《《《《 低地址
    //字节编号     3      2      1      0
    //nValue      0x00   0x00   0x00   0x01
    //aValue                           0x01
    //若为大端  则内存如下
    //      高地址 《《《《《《《《《《 低地址
    //字节编号     3      2      1      0
    //nValue      0x01   0x00   0x00   0x00
    //aValue                           0x00
}

//或者
//直接取低字节进行判断
//不要感到迷糊,首地址是变量占用的内存中最低的地址
bool IsLittle()
{
    unsigned int nValue = 1;
    char* p = (char*)&nValue;
    return (*p) == 1;
}

是不是还有个疑惑,什么样的数据会有大小端问题?字符串会不会有大小端问题?

字符,字符串 都是以字符为单位的,所以读写数据时不会有大小端问题;

数值(short/int/float/double/......),有多个字符组成,在读写时会有大小端;

解释下,字符串可以理解为单字节的字符数组,字符之间没有直接关联,不存在字节序问题;

还有人要问,宽字符串utf-16有没有大小端?别纠结,没有!

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

大小端问题 的相关文章

  • Semi-join在Greenplum中的三种实现方式

    Semi join xff08 半连接 xff09 是用来处理外表的记录是否在内表中存在与其匹配的行 xff0c 而无需考虑匹配行的条数 xff0c 半连接的返回结果集仅使用外表数据集 xff0c 使用场景如 xff1a in exists
  • C#在不同VS版本切换时报错未能找到类型或命名空间名称MySQL

    C 未能找到类型或命名空间名称MySQL 在尝试各种方法无效后 xff0c 通过下方链接第三种情况解决问题 https blog csdn net li gege article details 103416210 utm medium 6
  • Lipschitz 条件或者Lipschitz连续

    https blog csdn net tanga cc article details 86362897
  • STM32F4开发板学习笔记一

    STM32F4是由ST xff08 意法半导体 xff09 开发的一种高性能微控制器 xff0c 之前学习过51单片机的相关知识 xff0c 现在看STM32F4的芯片 xff0c 不得不说它强大的外设功能 xff0c 还有就是固件库 对于
  • 类的三种继承方式

    类的继承方式 公有型 xff08 public xff09 保护型 xff08 protected xff09 私有型 private xff0c 访问控制修饰符也有public protected private3种类型 继承方式不同 x
  • C++ 中在函数的前面加上static的作用

    在一般的函数前面加上static 作用是 xff1a 加了static后表示该函数失去了全局可见性 xff0c 只在该函数所在的文件作用域内可见 当函数声明为static以后 编译器在该目标编译单元内只含有该函数的入口地址 没有函数名 其它
  • 网络字节序跟主机字节序有什么区别

    网络字节序跟主机字节序有什么区别 xff0c 这是我16年9月份校招面试腾讯被问到的一个问题 xff0c 也是Linux服务器开发岗常考的面试题 字节序分为大端字节序和小端字节序 大端字节序是指一个整数的高位字节 xff08 32 31bi
  • 不使用strcat函数,实现两个字符串连接

    设计思路 xff1a 1 首先我们要找到目标字符串的结尾 xff0c 即 0 处 2 然后我们再依次把源字符串依次添加到目标字符串的结尾即可 实现源码如下 xff1a span class token macro property span
  • 使用环形缓冲区ringbuffer实现串口数据接收

    文章目录 1 ringbuffer简单介绍2 ringbuffer的代码实现2 1 ringbuffer数据结构定义2 2 ringbuffer初始化2 3 ringbuffer写数据2 4 ringbuffer读数据 3 在串口中使用ri
  • 结构体(struct)

    什么是结构体 结构是程序员定义数据类型 xff0c 与类非常相似 它们有数据成员和函数成员 xff0c 虽然相似 xff0c 但是有许多区别 xff0c 区别如下 xff1a 类是引用类型二结构是值类型 结构是隐式密封的 xff0c 这意味
  • 【C语言】——结构体进阶:结构体的内存对齐(超详细)

    前言 xff1a 上一篇已经讲了结构体的基本用法 相信各位小伙伴以经学会怎么使用 但是还有一个问题没有弄明白 结构体到底多大 xff0c 占内存空间多不多 xff0c 以经系统到底怎么访问结构体内的数据的 接下来 xff0c 详细分析一下结
  • 【HTTP】摘要认证 Digest access authentication

    第三方接口对接 xff1a 摘要认证 Digest access authentication HTTP认证方式 xff1a BASIC 认证 xff08 基本认证 xff09 xff1b DIGEST 认证 xff08 摘要认证 xff0
  • 自己编译安装OpenCV (linux/windows)

    简单介绍一下OpenCV OpenCV 是 Open Source Computer Vision Library 的简称 xff0c 在计算机视觉领域中是一个非常重要的开源库 xff0c 该库使用的是BSD开源协议 xff0c 这个开源协
  • 基于TCP的项目学习历程(一)实现简单的socket请求。瞎扯的,不要评论。

    毕业至今不到两年 xff0c 但从大四刚开始就在外面开始从事开发工作了 但是一直从事的WEB项目的开发 xff0c 一直没啥长进 最近由于需要 xff0c 需要学习基于TCP的服务器开发 xff0c 由此决定 xff0c 写点东西 xff0
  • laravel框架如何生成Authorization值

    1 xff0c 创建密码授权客户端 在laravel当前目录执行 php artisan passport client password 生成如下值 Client ID 11 Client Secret fOxGavTYTJFP7Eqo0
  • eclipse mysql 数据库报错 com.mysql.jdbc.Driver

    eclipse 项目使用mysql数据库 报一下错误 Caused by java lang ClassNotFoundException com mysql jdbc Driver 解决方法 xff1a 1 xff1a 首先查看项目中是否
  • eclipse svn 报错 文件夹已经不存在

    最近做项目用eclipse 遇到个很奇怪的问题 xff0c 前几天svn还是可以用的 xff0c 突然一下子不能用了 xff0c 于是网上各种找解决方法啊 xff0c 终于问题解决了 xff0c 总结一下 查看svn报错信息 xff1a s
  • Java 提供接口供其它应用调用

    64 author 会员 接口类 相关参数协议 xff1a 00 请求失败 01 请求成功 02 返回空值 03 请求协议参数不完整 04 用户名或密码错误 05 FKEY验证失败 64 Controller 64 RequestMappi
  • H5 下载文件到本地

    H5 下载文件到本地 其实 xff0c 目前下载文件到本地有很多中方法 xff0c 不管是 JavaScript 或者 jQuery 也好 xff0c 都有各色各样的方法 xff0c 都可以做的到 xff0c 在这里我介绍下我发现的一个比较
  • Javaweb QQ第三方登录

    这是第三方登录的第二篇 xff0c 关于web接入微博第三方登录可以参考我之前的博文 xff0c 之前的博文比较详细的讲解了该如何进行第三方登录的申请和准备工作 http blog csdn net cwfjimogudan article

随机推荐

  • vmware 虚拟机启动失败, Intel VT-x 处于禁用状态

    错误提示 xff1a 已将该虚拟机配置为使用 64 位客户机操作系统 但是 xff0c 无法执行 64 位操作 此主机支持 Intel VT x xff0c 但 Intel VT x 处于禁用状态 如果已在 BIOS 固件设置中禁用 Int
  • java 35 个 Java 代码性能优化总结

    前言 代码优化 xff0c 一个很重要的课题 可能有些人觉得没用 xff0c 一些细小的地方有什么好修改的 xff0c 改与不改对于代码的运行效率有什么影响呢 xff1f 这个问题我是这么考虑的 xff0c 就像大海里面的鲸鱼一样 xff0
  • 基于51单片机超声波红外避障语音导盲仪设计(全套资料)

    基于51单片机的超声波红外避障语音导盲仪设计 本系统采用STC89C52单片机 43 4位高亮白色LED灯 43 红外避障传感器电路 43 超声波电路 43 光敏电阻模块 43 语音报警电路 43 震动电路 43 液晶1602电路 43 电
  • linux 解压zip压缩包命令

    unzip 文件名 zip d 解压位置 例如 xff1a unzip 微信 zip d demowx
  • linux 文件授权命令

    文件授权 chmod 43 x sh
  • linux tomcat常用命令

    startup sh 启动tomcat shutdown sh 关闭tomcat ps ef grep tomcat 查看Tomcat运行 kill 9 4723 杀进程 tail f catalina out 查看tomcat运行日志 c
  • linux redis常用命令

    flushall 清空redis缓存 redis cli 进入redis xff08 需要进入redis的安装目录下 xff09 get key 查找key del key 删除key
  • java DateUtils时间工具栏

    package com eeye common utils import org apache commons lang3 time DateFormatUtils import java text ParseException impor
  • unity3d:Astar寻路,A星,A*,二叉堆优化Open表

    原理视频 油管 xff1a https youtu be i0x5fj4PqP4 别人的B站翻译 xff1a https www bilibili com video BV1v44y1h7Dt spm id from 61 333 999
  • TCP/IP 、HTTP、Socket的区别与联系

    1 Socket和http的区别 http xff1a 如何封装数据 xff1b 基于TCP协议 xff0c 简单的对象访问协议 xff0c 对应于应用层 xff1b xff08 货物 xff09 tcp协议 xff1a 数据在网络中的传输
  • 【亲测一次成功】将本地代码上传到Gitee码云

    1 在Gitee码云上创建仓库 2 在本地新建一个文件夹 3 右击新建的文件夹 xff0c 使用git bush here 4 输入 git init 5 输入 git remote add origin 43 仓库地址 6 输入 git
  • keil5打开工程报错:error:not found device

    1 error not found device 解决方法 xff1a 将Project文件夹中的工程扩展名由 uvproj改为 uvprojx 原因 xff1a 前提是所有的库安装都是正常且正确的 xff0c 所以应该是如下问题 xff1
  • STM32学习笔记:IWDG_独立看门狗

    1 简介 独立看门狗就是一个12位的递减计数器 xff0c 最大值0xFFF xff1b 计数器的值从某一个值减到0时 xff0c 系统产生一个复位信号 xff08 IWDG RESET xff09 xff1b 在计数器没减到0之前 xff
  • 基于单片机避障导盲智能拐杖控制设计(毕设资料)

    本设计研究为盲人提供行走时 xff0c 遇到前方障碍物提前躲避的智能避障预警系统 以AT89S52单片机作为核心处理器 xff0c 采用超声波回波时间差测量人与物体之间的安全距离 xff0c 实现了提前预警使用者避让障碍物 xff0c 起到
  • Matlab:excel文件 转 txt文件 (只需2行代码)

    亲测有用 xff0c 只需两行代码 xff0c 将EXCEL文件 xff0c 转换成txt文件 xff1a Data 61 readtable 39 TEST xls 39 writetable Data 39 test txt 39 ex
  • 快速理解C语言——指针

    1 地址和内存 把值存在内存中 xff0c 内存就给每一个值分配一个地址 xff1a 100 104 108 112 116就是每个值分别对应的地址 xff1b 给每个内存地址起个别名 xff0c 就是 xff1a 变量 2 值和类型 如下
  • 亲测有用!完美关闭win10不断自动更新

    自从更新到win10以来 xff0c 每次开关机都会遇到win10更新的问题 试过CSDN和其他很多种方法都没有用 xff0c 最后在知乎上看到一个大神写的 用以下方法完美解决 xff0c 再没出现过自动更新的问题 如何完美解决win10自
  • 一文解决所有PCA问题——这是我看过最好的讲解PCA理论文章

    转载 xff1a http blog codinglabs org articles pca tutorial html PCA xff08 Principal Component Analysis xff09 是一种常用的数据分析方法 P
  • C语言解析http协议

    C语言解析http协议 1 关键解析函数1 1 strstr xff08 xff09 1 2 strncmp 2 代码 1 关键解析函数 1 1 strstr xff08 xff09 函数原型 xff1a span class token
  • 大小端问题

    本来我想说 xff0c Windows平台一般是小端 xff0c Linux一般是大端 xff1b 但是 实际上大小端CPU架构有关 xff0c 当然和系统也可能有关 xff0c 可以配置大小端 xff1b 对于CPU框架 xff0c AR