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

字节与二进制

  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. 只需要使用浮点数或者整数,做一个测试即可快速确认。
相关推荐
Ada's3 小时前
【计算机基础系列】003:Python数据结构
开发语言·数据结构·python
wanderist.6 小时前
线性筛法详解:从筛质数到欧拉函数、Möbius 函数与约数函数
java·数据结构·算法
All for pursuit.6 小时前
【设计-1】208.实现Trie (前缀树)
数据结构·c++·算法·leetcode
程序员清风8 小时前
哈希表:从键值映射到高效查找
数据结构·哈希算法·散列表
Logic10111 小时前
C语言/数据结构字符串题解:最短循环节——找出能重复构成原串的最短基础子串
c语言·数据结构·字符串·枚举·时间复杂度·算法题·kmp优化
垆边人似月.12 小时前
城市连通性(200分 / 并查集)
数据结构·算法·图论
Gust of wind12 小时前
串与KMP模式匹配:存储结构、基本操作、next数组手算
c语言·数据结构·后端·算法
by2099912 小时前
list:迭代器与资源管理实现的综合叙述(下)
数据结构·c++·笔记·list
我不会起名字32213 小时前
二叉树的遍历与二叉搜索树:把递归、迭代、还原树一次讲透
数据结构·leetcode·二叉树·二叉搜索树
yi01114 小时前
DAY22: LeetCode 733:图像渲染——从二维网格开始理解 DFS 和 BFS
数据结构·笔记·python·算法·leetcode·深度优先·宽度优先