【上位机数据转换】数据结构原理及大小端

字节与二进制

  1. 对于计算机来说,操作的最小单位是"比特位"。
  2. 对于开发者来说,操作的最小单位是"字节"。

数据类型范围

类型 存储空间(单位:bit) 数据范围
位/Bool 1 True 或 False
字节/Byte 8 0 到 255
字节/SByte 8 -128 到 127
短整型/UShort 16 0 到 65,535
短整型/Short 16 -32,768 到 32,767
整型/UInt 32 0 到 4,294,967,295
整型/Int 32 -2,147,483,648 到 2,147,483,647
长整型/ULong 64 0 到 18,446,744,073,709,551,615
长整型/Long 64 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
单精度/Float 32 ±1.5×10⁻⁴⁵ 到 ±3.4×10³⁸
双精度/Double 64 ±5.0×10⁻³²⁴ 到 ±1.7×10³⁰⁸
字符串/String - 无限

大小端字节序

什么是大小端

:::info
以32位处理器为例,存储数字0x11223344

:::

  1. 大端字节顺序是指高位字节存储在低位地址,低位字节存储在高位地址。
地址变化趋势 地址 数据
低位 ⬇ 高位 0x00000000 0x11
0x00000001 0x22
0x00000002 0x33
0x00000003 0x44
  1. 小端字节顺序是指高位字节存储在高位地址,低位字节存储在高位地址。
地址变化趋势 地址 数据
低位高位 0x00000000 0x44
0x00000001 0x33
0x00000002 0x22
0x00000003 0x11

数据转换为什么需要大小端

  1. "服务器"按照它们的大小端方式把数据转换成字节数组发送给我们。
  2. 我们必须要按照"服务器"的大小端字节顺序解析数据才能得到正确的数据。
  3. 大小端的本质就是一个字节的顺序。

如何使用C#代码来举例说明

csharp 复制代码
void test1()
{
    float data = 123.4f;

    // 按照本地大小端方式转换成字节数组
    byte[] value = BitConverter.GetBytes(data);
    Console.WriteLine("本机字节序数据:" + data.ToString());
    Console.WriteLine("本机字节序:" + StringLib.GetHexStringFromByteArray(value));

    // 逆转字节序
    byte[] value2 = new byte[value.Length];

    value2[0] = value[3];
    value2[1] = value[2];
    value2[2] = value[1];
    value2[3] = value[0];

    float result = BitConverter.ToSingle(value2, 0);
    Console.WriteLine("逆转字节序数据:" + result);
    Console.WriteLine("逆转字节序:" + StringLib.GetHexStringFromByteArray(value2));
}

// 运行输出
本机字节序数据:123.4
本机字节序:CD CC F6 42
逆转字节序数据:-4.298364E+08
逆转字节序:42 F6 CC CD

大小端几种形式

  1. ABCD
  2. BADC
  3. CDAB
  4. DCBA

怎么理解大小端

  1. 大小端只是一种字节序,对于一个已知的"服务器"来说,是一个固定值。
  2. 只需要使用浮点数或者整数,做一个测试即可快速确认。
相关推荐
2401_8414956416 分钟前
【LeetCode刷题】二叉树的中序遍历
数据结构·python·算法·leetcode··递归·遍历
历程里程碑12 小时前
滑动窗口---- 无重复字符的最长子串
java·数据结构·c++·python·算法·leetcode·django
派大鑫wink13 小时前
【Day61】Redis 深入:吃透数据结构、持久化(RDB/AOF)与缓存策略
数据结构·redis·缓存
独处东汉14 小时前
freertos开发空气检测仪之输入子系统结构体设计
数据结构·人工智能·stm32·单片机·嵌入式硬件·算法
放荡不羁的野指针14 小时前
leetcode150题-滑动窗口
数据结构·算法·leetcode
BHXDML14 小时前
数据结构:(一)从内存底层逻辑理解线性表
数据结构
小龙报14 小时前
【C语言进阶数据结构与算法】单链表综合练习:1.删除链表中等于给定值 val 的所有节点 2.反转链表 3.链表中间节点
c语言·开发语言·数据结构·c++·算法·链表·visual studio
Anastasiozzzz15 小时前
LeetCode Hot100 215. 数组中的第K个最大元素
数据结构·算法·leetcode
xuedingbue16 小时前
数据结构与顺序表:高效数据管理秘籍
数据结构·算法·链表
啊阿狸不会拉杆17 小时前
《数字信号处理 》第 7 章-无限长单位冲激响应 (IIR) 数字滤波器设计方法
数据结构·算法·信号处理·数字信号处理·dsp