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

字节与二进制

  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. 只需要使用浮点数或者整数,做一个测试即可快速确认。
相关推荐
JasmineX-11 小时前
数据结构——静态链表(c语言笔记)
c语言·数据结构·链表
小卡皮巴拉2 小时前
【笔试强训】Day1
开发语言·数据结构·c++·算法
༾冬瓜大侠༿3 小时前
数据结构:排序
数据结构·算法·排序算法
.YM.Z7 小时前
数据结构——链表
数据结构·链表
hn小菜鸡8 小时前
LeetCode 2570.合并两个二维数组-求和法
数据结构·算法·leetcode
滋滋不吱吱9 小时前
栈的进阶篇
数据结构·算法·leetcode
YQ_ZJH9 小时前
Java List列表创建方法大总结
java·开发语言·数据结构·算法·list
Rsingstarzengjx10 小时前
【算法】【数学】【质数】质数相关 leetcode 204
数据结构·算法
爱编程的化学家11 小时前
代码随想录算法训练营第21天 -- 回溯4 || 491.非递减子序列 / 46.全排列 /47.全排列 II
数据结构·c++·算法·leetcode·回溯·全排列·代码随想录
小欣加油11 小时前
leetcode 129 求根节点到叶节点数字之和
数据结构·c++·算法·leetcode