首页 > 其他分享 >学习笔记

学习笔记

时间:2024-06-18 11:22:44浏览次数:13  
标签:大端序 Console 字节 小端序 存储 笔记 学习 endian

大小端(Endianness)指的是在计算机系统中多字节数据的存储顺序。主要分为两种类型:

大端序(Big-endian)和小端序(Little-endian)。

理解和处理大小端问题在跨平台开发和处理网络数据时尤为重要。

大端序(Big-endian)

在大端序中,高位字节存储在内存的低地址处,低位字节存储在内存的高地址处。

例如,假设一个32位整数0x12345678存储在内存中,地址从0x00开始,大端序的存储方式如下:

地址
0x00 0x12
0x01 0x34
0x02 0x56
0x03 0x78

小端序(Little-endian)
在小端序中,低位字节存储在内存的低地址处,高位字节存储在内存的高地址处。

例如,同样的32位整数0x12345678存储在内存中,小端序的存储方式如下:

地址
0x00 0x78
0x01 0x56
0x02 0x34
0x03 0x12

示例代码
下面是一个C#示例代码,用于演示如何在运行时检查系统的大小端性,并进行字节顺序转换:

点击查看代码
using System;

class EndiannessExample
{
    static void Main(string[] args)
    {
        // 检查系统的大小端性
        if (BitConverter.IsLittleEndian)
        {
            Console.WriteLine("系统是小端序 (Little-endian)。");
        }
        else
        {
            Console.WriteLine("系统是大端序 (Big-endian)。");
        }

        // 示例数据
        int value = 0x12345678;
        byte[] bytes = BitConverter.GetBytes(value);

        Console.WriteLine("原始字节顺序:");
        PrintBytes(bytes);

        // 如果当前系统是小端序,转换为大端序
        if (BitConverter.IsLittleEndian)
        {
            Array.Reverse(bytes);
            Console.WriteLine("转换为大端序后的字节顺序:");
            PrintBytes(bytes);
        }
    }

    static void PrintBytes(byte[] bytes)
    {
        foreach (byte b in bytes)
        {
            Console.Write(b.ToString("X2") + " ");
        }
        Console.WriteLine();
    }
}

输出示例
假设在一个小端序系统上运行此程序,输出将会是:

系统是小端序 (Little-endian)。
原始字节顺序:
78 56 34 12
转换为大端序后的字节顺序:
12 34 56 78

应用场景

网络通信:网络协议通常规定了字节序,例如TCP/IP协议使用大端序。因此,在不同字节序的主机之间通信时,需要进行字节序转换。
文件存储:某些文件格式规定了字节序,例如BMP图像文件使用小端序,处理这些文件时需要注意字节序。
跨平台开发:在不同平台(可能具有不同的字节序)之间共享数据时,需要处理好字节序问题,确保数据的一致性。
小结
理解大小端概念及其在数据存储和传输中的影响是非常重要的,尤其在跨平台和网络通信领域。通过上述代码示例,可以检查系统的字节序并进行必要的转换,以确保数据在不同平台和协议之间的一致性。

标签:大端序,Console,字节,小端序,存储,笔记,学习,endian
From: https://www.cnblogs.com/rhhLiu/p/18253975

相关文章

  • 补充第一天的python学习笔记
    昨天晚上学习到10点左右太困了,没有完成既定目标,迁延一日。补充下昨天的学习内容,算是对第一天学习时的回顾。1.字符集编码(1)utf-8全球通用,一个字节等于8个二进制位,utf-8用于中文占3个字节(2)unicode全球通用,16位二进制以上(3)gbk专为中国人设计的编码,一个文字占2个字节......
  • 别让碎片化学习把你拖向深渊!
    文章虽然内容很棒,但是在碎片化的时间里阅读,我几乎没有得到任何价值。这不得不让我重新审视「碎片化学习」这件事。碎片化学习的窘境5-15分钟的碎片化学习,似乎是当下人的无奈之举。整块时间对于我们来说是个奢侈品,白天要上班、上学,晚上要加班或忙于各种社交、娱乐活动,睡前还要......
  • Django 笔记一
    Django模板标签变量模板语法:view{“HTML变量名”:“views变量名”}HTML{{变量名}}过滤器模板语法:{{变量名|过滤器:可选参数}}模板过滤器可以在变量被显示前修改它,过滤器使用管道字符{{name|lower}}{{name}}变量被过滤器lower处......
  • 机器学习算法 —— K近邻(KNN分类)
    ......
  • django学习入门系列之第三点《快速了解 CSS》
    文章目录CSS快速了解CSS应用方式在标签上在head标签中写到文件中问题:用Flask框架开发不方便往期回顾CSSCSS专门用来"美化"标签基础CSS,写简单的界面&能看懂&会改就行模块,调整和修改快速了解style这种就叫css样式<imgsrc"..."style="height:100px"/><d......
  • 购物车实战学习
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>购物车实战</title>&l......
  • m基于Qlearning强化学习的小车倒立摆控制系统matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:      算法涉及理论知识概要       基于Q-learning的强化学习方法应用于小车倒立摆控制系统,是通过让智能体(即控制小车的算法)在与环境的交互过程中学习到最优的控制策略,以保持倒立摆在不稳定平衡状态下的直立。Q-l......
  • 嵌入式学习
    笔记作业升级优化自己应用程序的登录界面。   要求:1.qss实现         2.需要有图层的叠加(QFrame)         3.设置纯净窗口后,有关闭等窗口功能。         4.如果账号密码正确,则实现登录界面关闭,另一个应用......
  • clip_en的使用学习
    代码分析importtorchimportcn_clip.clipasclipfromPILimportImagefromcn_clip.clipimportload_from_name,available_modelsprint("Torchversion:",torch.__version__)device="cuda"iftorch.cuda.is_available()else"cpu"......
  • 【简单讲解下OneFlow深度学习框架】
    ......