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

字节与二进制

  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. 只需要使用浮点数或者整数,做一个测试即可快速确认。
相关推荐
地球资源数据云6 分钟前
1900-2023年中国物种分布点位矢量数据集
大数据·数据结构·数据库·数据仓库·人工智能
AI人工智能+电脑小能手26 分钟前
【大白话说Java面试题】【Java基础篇】第20题:HashMap在计算index的时候,为什么要对数组长度做减1操作
java·开发语言·数据结构·后端·面试·哈希算法·hash-index
牢姐与蒯31 分钟前
cpp数据结构之map
数据结构
故事和你911 小时前
洛谷-算法2-3-分治与倍增5
开发语言·数据结构·c++·算法·动态规划·图论
北顾笙9801 小时前
day37-数据结构力扣
数据结构·算法·leetcode
liuyao_xianhui2 小时前
进程概念与进程状态_Linux
linux·运维·服务器·数据结构·c++·哈希算法·宽度优先
如君愿2 小时前
考研复习 Day 26 | 习题--计算机网络第三章(数据链路层 下)、数据结构 多维数组与广义表
数据结构·计算机网络·考研·记录考研
bqq198610262 小时前
MySQL分库分表
数据结构·mysql
迷途之人不知返2 小时前
List的模拟实现
数据结构·c++·学习·list
凯瑟琳.奥古斯特4 小时前
图论核心考点精讲
开发语言·数据结构·算法·排序算法·哈希算法