2.各数据类型转字节数据
2.1 知识点
回顾C#知识——不同变量类型
- 有符号整数类型:
- sbyte:有符号的8位整数,取值范围为-128到127。
- int:有符号的32位整数,取值范围为-2,147,483,648到2,147,483,647。
- short:有符号的16位整数,取值范围为-32,768到32,767。
- long:有符号的64位整数,取值范围为-9,223,372,036,854,775,808到9,223,372,036,854,775,807。
- 无符号整数类型:
- byte:无符号的8位整数,取值范围为0到255。
- uint:无符号的32位整数,取值范围为0到4,294,967,295。
- ushort:无符号的16位整数,取值范围为0到65,535。
- ulong:无符号的64位整数,取值范围为0到18,446,744,073,709,551,615。
- 浮点数类型:
- float:单精度浮点数,占用32位,用于表示小数,取值范围大约为±1.5 x 10^-45到±3.4 x 10^38。
- double:双精度浮点数,占用64位,用于表示更大范围的小数,取值范围大约为±5.0 x 10^-324到±1.7 x 10^308。
- decimal:高精度的小数,占用128位,适用于财务和货币计算,取值范围大约为±1.0 x 10^-28到±7.9 x 10^28。
- 特殊类型:
- bool:布尔值,表示真或假。
- char:字符类型,表示单个Unicode字符。
- string:字符串类型,表示一串Unicode字符组成的文本。
回顾C#知识——变量的本质
- 变量的本质是2进制,在内存中都以字节的形式存储着。
- 1byte = 8bit,1bit(位)不是0就是1。
- 通过sizeof方法可以看到常用变量类型占用的字节空间长度。
print("有符号"); // 打印 "有符号"
print("sbyte" + sizeof(sbyte) + "字节"); // 打印 "sbyte4字节"
print("int" + sizeof(int) + "字节"); // 打印 "int4字节"
print("short" + sizeof(short) + "字节"); // 打印 "short2字节"
print("long" + sizeof(long) + "字节"); // 打印 "long8字节"
print("无符号"); // 打印 "无符号"
print("byte" + sizeof(byte) + "字节"); // 打印 "byte1字节"
print("uint" + sizeof(uint) + "字节"); // 打印 "uint4字节"
print("ushort" + sizeof(ushort) + "字节"); // 打印 "ushort2字节"
print("ulong" + sizeof(ulong) + "字节"); // 打印 "ulong8字节"
print("浮点"); // 打印 "浮点"
print("float" + sizeof(float) + "字节"); // 打印 "float4字节"
print("double" + sizeof(double) + "字节"); // 打印 "double8字节"
print("decimal" + sizeof(decimal) + "字节"); // 打印 "decimal16字节"
print("特殊"); // 打印 "特殊"
print("bool" + sizeof(bool) + "字节"); // 打印 "bool1字节"
print("char" + sizeof(char) + "字节"); // 打印 "char2字节"
2进制文件读写的本质
- 它就是通过将各类型变量转换为字节数组,将字节数组直接存储到文件中。
- 一般人是看不懂存储的数据的,不仅可以节约存储空间,提升效率,还可以提升安全性。
- 而且在网络通信中我们直接传输的数据也是字节数据(2进制数据)。
各类型数据和字节数组相互转换
- C#提供了一个公共类帮助我们进行转化,我们只需要记住API即可。
- 类名:BitConverter,命名空间:using System。
BitConverter.GetBytes 将各类型转字节,可以传入各个类型的变量作为参数。
//BitConverter.GetBytes方法 将各类型转字节 可以传入各个类型的变量作为参数
byte[] bytes = BitConverter.GetBytes(257);
BitConverter.ToXX 字节数组转各类型
//BitConverter.ToXX方法 字节数组转各类型 第二个参数是从数组的第几个字节开始转换
//注意:这里需要确保数组长度至少为4,否则会抛出ArgumentOutOfRangeException异常
int i = BitConverter.ToInt32(bytes, 0); //修改了起始索引为0,表示从最低有效字节开始转换 假如传入1 就只有3个字节给系统转换导致报错
print(i);//257
标准编码格式
- 编码是一种将文字、数字或其它对象转换成二进制数据的方法,以便于计算机存储和处理。
- 不同的编码格式有不同的转换规则,因此需要统一和标准化,才能保证编码的正确性和互通性。
- 常见的编码格式有 ASCII、ANSI、GBK、GB2312、UTF-8、GB18030 和 UNICODE 等。
说人话
- 计算机中数据的本质就是2进制数据。
- 编码格式就是用对应的2进制数表示不同的文字。
- 由于世界上有各种不同的语言,所以会有很多种不同的编码格式。
- 不同的编码格式对应的规则是不同的。
- 如果在读取字符时采用了不匹配的编码格式,可能会出现乱码。
游戏开发中常用编码格式 UTF-8
- 中文相关编码格式 GBK
- 英文相关编码格式 ASCII
在C#中有一个专门的Encoding类来帮助我们将字符串和字节数组进行转换
- 类名:Encoding
- 需要引用命名空间:using System.Text;
Encoding.UTF8.GetBytes 将字符串以指定编码格式转字节
byte[] bytes2 = Encoding.UTF8.GetBytes("林文韬");
Encoding.UTF8.GetString 字节数组以指定编码格式转字符串
string s1 = Encoding.UTF8.GetString(bytes2);
string s2 = Encoding.UTF8.GetString(bytes2, 0, bytes2.Length);//这种重载可以指定从数组的哪个位置开始转换,以及转换多少个字节
print(s1);//林文韬
总结
- 我们可以通过 BitConverter 和 Encoding 类将所有 C# 提供给我们的数据类型和字节数组之间进行相互转换了。
- 我们需要熟练掌握其中的 API。
2.2 知识点代码
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
public class Lesson02_各数据类型转字节数据 : MonoBehaviour
{
void Start()
{
#region 知识点一 回顾C#知识——不同变量类型
//不同变量类型
//有符号 sbyte int short long
//无符号 byte uint ushort ulong
//浮点 float double decimal
//特殊 bool char string
#endregion
#region 知识点二 回顾C#知识——变量的本质
//变量的本质是2进制
//在内存中都以字节的形式存储着
//1byte = 8bit
//1bit(位)不是0就是1
//通过sizeof方法可以看到常用变量类型占用的字节空间长度
print("有符号"); // 打印 "有符号"
print("sbyte" + sizeof(sbyte) + "字节"); // 打印 "sbyte4字节"
print("int" + sizeof(int) + "字节"); // 打印 "int4字节"
print("short" + sizeof(short) + "字节"); // 打印 "short2字节"
print("long" + sizeof(long) + "字节"); // 打印 "long8字节"
print("无符号"); // 打印 "无符号"
print("byte" + sizeof(byte) + "字节"); // 打印 "byte1字节"
print("uint" + sizeof(uint) + "字节"); // 打印 "uint4字节"
print("ushort" + sizeof(ushort) + "字节"); // 打印 "ushort2字节"
print("ulong" + sizeof(ulong) + "字节"); // 打印 "ulong8字节"
print("浮点"); // 打印 "浮点"
print("float" + sizeof(float) + "字节"); // 打印 "float4字节"
print("double" + sizeof(double) + "字节"); // 打印 "double8字节"
print("decimal" + sizeof(decimal) + "字节"); // 打印 "decimal16字节"
print("特殊"); // 打印 "特殊"
print("bool" + sizeof(bool) + "字节"); // 打印 "bool1字节"
print("char" + sizeof(char) + "字节"); // 打印 "char2字节"
#endregion
#region 知识点三 2进制文件读写的本质
//它就是通过将各类型变量转换为字节数组
//将字节数组直接存储到文件中
//一般人是看不懂存储的数据的
//不仅可以节约存储空间,提升效率
//还可以提升安全性
//而且在网络通信中我们直接传输的数据也是字节数据(2进制数据)
#endregion
#region 知识点四 各类型数据和字节数据相互转换
//C#提供了一个公共类帮助我们进行转化
//我们只需要记住API即可
//类名:BitConverter
//命名空间:using System
//BitConverter.GetBytes方法 将各类型转字节 可以传入各个类型的变量作为参数
byte[] bytes = BitConverter.GetBytes(257);
//BitConverter.ToXX方法 字节数组转各类型 第二个参数是从数组的第几个字节开始转换
//注意:这里需要确保数组长度至少为4,否则会抛出ArgumentOutOfRangeException异常
int i = BitConverter.ToInt32(bytes, 0); //修改了起始索引为0,表示从最低有效字节开始转换 假如传入1 就只有3个字节给系统转换导致报错
print(i);//257
#endregion
#region 知识点五 标准编码格式
//编码是一种将文字、数字或其它对象转换成二进制数据的方法,以便于计算机存储和处理。
//不同的编码格式有不同的转换规则,因此需要统一和标准化,才能保证编码的正确性和互通性。
//常见的编码格式有ASCII、ANSI、GBK、GB2312、UTF-8、GB18030和UNICODE等。
// 说人话
// 计算机中数据的本质就是2进制数据
// 编码格式就是用对应的2进制数表示不同的文字
// 由于世界上有各种不同的语言,所以会有很多种不同的编码格式
// 不同的编码格式对应的规则是不同的
// 如果在读取字符时采用了不匹配的编码格式,可能会出现乱码
// 游戏开发中常用编码格式 UTF-8
// 中文相关编码格式 GBK
// 英文相关编码格式 ASCII
// 在C#中有一个专门的Encoding类 来帮助我们将字符串和字节数组进行转换
// 类名:Encoding
// 需要引用命名空间:using System.Text;
//Encoding.UTF8.GetBytes方法 将字符串以指定编码格式转字节
byte[] bytes2 = Encoding.UTF8.GetBytes("林文韬");
//Encoding.UTF8.GetString方法 字节数组以指定编码格式转字符串
string s1 = Encoding.UTF8.GetString(bytes2);
string s2 = Encoding.UTF8.GetString(bytes2, 0, bytes2.Length);//这种重载可以指定从数组的哪个位置开始转换,以及转换多少个字节
print(s1);//林文韬
#endregion
#region 总结
//我们可以通过BitConverter和Encoding类
//将所有C#提供给我们的数据类型和字节数组之间进行相互转换了
//我们需要熟练掌握其中的API
#endregion
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com