UD4L1——各类型数据转字节数据

本章代码关键字

1
2
3
4
5
6
7
BitConverter                //字节数据转换器类,用于将各种数据类型转换为二进制的字节数组
BitConverter.GetBytes() //将数据转换为字节数组,数组长度取决于数据类型有多少位
BitConverter.ToInt32() //将字节数组转换为int类型,要转换为其他类型,记住 To+类型 或者 To+Int+位数 的方法名规律即可
System.Text //Encoding所在的命名空间
Encoding //编码格式类
Encoding.UTF8.GetBytes() //将字符串按照UTF-8的编码格式转换为字节数组
Encoding.UTF8.GetString() //将字节数组按照UTF-8的编码格式转换为字符串

不同变量类型

详细内容 ——> CS1L2——变量

  • 有符号:sbyte int short long
  • 无符号:byte uint ushort ulong
  • 浮点:float double decimal
  • 特殊:bool char string

变量的本质

详细内容 ——> CS1L3——变量的本质

变量的本质是2进制,在内存中都以字节的形式存储着,1byte = 8bit​,1bit​(位)不是0就是1
通过sizeof​方法可以看到常用变量类型占用的字节空间长度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
print("有符号");
print("sbyte" + sizeof(sbyte) + "字节");
print("int" + sizeof(int) + "字节");
print("short" + sizeof(short) + "字节");
print("long" + sizeof(long) + "字节");
print("无符号");
print("byte" + sizeof(byte) + "字节");
print("uint" + sizeof(uint) + "字节");
print("ushort" + sizeof(ushort) + "字节");
print("ulong" + sizeof(ulong) + "字节");
print("浮点");
print("float" + sizeof(float) + "字节");
print("double" + sizeof(double) + "字节");
print("decimal" + sizeof(decimal) + "字节");
print("特殊");
print("bool" + sizeof(bool) + "字节");
print("char" + sizeof(char) + "字节");

二进制文件读写的本质

它就是通过将各类型变量转换为字节数组,然后将字节数组直接存储到文件中
一般人是看不懂存储的数据的,不仅可以节约存储空间,提升效率,还可以提升安全性
而且在网络通信中我们直接传输的数据也是字节数据(2进制数据)

各类型数据和字节数据相互转换

我们可以通过BitConverter​和Encoding​类
将所有C#提供给我们的数据类型和字节数组之间进行相互转换了
我们需要熟练掌握其中的API

C#提供了一个公共类帮助我们进行转化,我们只需要记住API即可
类名:BitConverter
命名空间:System

  1. 将各类型转字节

    字节数组的长度,由该方法输入的数据类型决定,例如int​就是4个字节,这个数组的长度就是4,存储了4个字节
    这个方法可以转换大部分的基本数据类型,除了decimal​和string​,decimal​我们几乎不用,而string​我们使用Encoding​类来转换

    1
    byte[] bytes = BitConverter.GetBytes(99);
  2. 字节数组转各类型

    将字节数组转换为各种类型时,根据类型的不同,方法名是不同的,但是方法名的规律很简单,基本就是To + 类型​或者To + Int + 位数
    第一个参数填入要转换的字节数组,第二个参数填入要从数组第几个开始读取(默认为0)

    1
    2
    int i = BitConverter.ToInt32(bytes, 0);
    print(i);

标准编码格式(字符串的字节数据转换)

编码是用预先规定的方法将文字、数字或其它对象编成数码,或将信息、数据转换成规定的电脉冲信号
为保证编码的正确性,编码要规范化、标准化,即需有标准的编码格式。
常见的编码格式有ASCII、ANSI、GBK、GB2312、UTF-8、GB18030​和UNICODE​等

关于字符编码,详细请见:字符编码

说人话:
计算机中数据的本质就是2进制数据,编码格式就是用对应的2进制数,对应不同的文字
由于世界上有各种不同的语言,所有会有很多种不同的编码格式,不同的编码格式,对应的规则是不同的
如果在读取字符时采用了不统一的编码格式,可能会出现乱码

  • 游戏开发中常用编码格式:UTF-8
  • 中文相关编码格式:GBK
  • 英文相关编码格式:ASCII

在C#中有一个专门的编码格式类,来帮助我们将字符串和字节数组进行转换
类名:Encoding
需要引用命名空间:System.Text

  1. 字符串以指定编码格式转字节

    字符串 转换为 指定编码格式的字节数组 需要我们Encoding.编码格式.GetBytes()​,一般在游戏开发中我们都使用UTF-8​这个编码格式

    1
    byte[] strBytes = Encoding.UTF8.GetBytes("字符串测试");
  2. 字节数组以指定编码格式转字符串

    字节数组 依据指定编码格式转换为 字符串 需要我们Encoding.编码格式.GetString()​,一般在游戏开发中我们都使用UTF-8​这个编码格式
    第一个参数填入要转换的字节数组,第二个参数填入要从数组第几个开始读取(默认0),第三个参数填入要读取几个字节(默认全部读取)

    1
    2
    string s = Encoding.UTF8.GetString(strBytes, 0, strBytes.Length);
    print(s);