字节与二进制
- 对于计算机来说,操作的最小单位是"比特位"。
- 对于开发者来说,操作的最小单位是"字节"。
数据类型范围
| 类型 | 存储空间(单位: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#代码来举例说明
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
大小端几种形式
- ABCD
- BADC
- CDAB
- DCBA
怎么理解大小端
- 大小端只是一种字节序,对于一个已知的"服务器"来说,是一个固定值。
- 只需要使用浮点数或者整数,做一个测试即可快速确认。