【上位机数据转换】数据结构原理及大小端
字节与二进制
- 对于计算机来说,操作的最小单位是“比特位”。
- 对于开发者来说,操作的最小单位是“字节”。
数据类型范围
类型 | 存储空间(单位: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
:::
- 大端字节顺序是指高位字节存储在低位地址,低位字节存储在高位地址。
地址变化趋势 | 地址 | 数据 |
---|---|---|
低位 ⬇ 高位 | 0x00000000 | 0x11 |
0x00000001 | 0x22 | |
0x00000002 | 0x33 | |
0x00000003 | 0x44 |
- 小端字节顺序是指高位字节存储在高位地址,低位字节存储在高位地址。
地址变化趋势 | 地址 | 数据 |
---|---|---|
低位 ⬇ 高位 | 0x00000000 | 0x44 |
0x00000001 | 0x33 | |
0x00000002 | 0x22 | |
0x00000003 | 0x11 |
数据转换为什么需要大小端
- “服务器”按照它们的大小端方式把数据转换成字节数组发送给我们。
- 我们必须要按照“服务器”的大小端字节顺序解析数据才能得到正确的数据。
- 大小端的本质就是一个字节的顺序。
如何使用C#代码来举例说明
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
大小端几种形式
- ABCD
- BADC
- CDAB
- DCBA
怎么理解大小端
- 大小端只是一种字节序,对于一个已知的“服务器”来说,是一个固定值。
- 只需要使用浮点数或者整数,做一个测试即可快速确认。