UD4L1——各类型数据转字节数据
UD4L1——各类型数据转字节数据
本章代码关键字
1 | BitConverter //字节数据转换器类,用于将各种数据类型转换为二进制的字节数组 |
不同变量类型
详细内容 ——> CS1L2——变量
- 有符号:
sbyte int short long
- 无符号:
byte uint ushort ulong
- 浮点:
float double decimal
- 特殊:
bool char string
变量的本质
详细内容 ——> CS1L3——变量的本质
变量的本质是2进制,在内存中都以字节的形式存储着,1byte = 8bit
,1bit
(位)不是0就是1
通过sizeof
方法可以看到常用变量类型占用的字节空间长度
1 | print("有符号"); |
二进制文件读写的本质
它就是通过将各类型变量转换为字节数组,然后将字节数组直接存储到文件中
一般人是看不懂存储的数据的,不仅可以节约存储空间,提升效率,还可以提升安全性
而且在网络通信中我们直接传输的数据也是字节数据(2进制数据)
各类型数据和字节数据相互转换
我们可以通过BitConverter
和Encoding
类
将所有C#提供给我们的数据类型和字节数组之间进行相互转换了
我们需要熟练掌握其中的API
C#提供了一个公共类帮助我们进行转化,我们只需要记住API即可
类名:BitConverter
命名空间:System
-
将各类型转字节
字节数组的长度,由该方法输入的数据类型决定,例如
int
就是4个字节,这个数组的长度就是4,存储了4个字节
这个方法可以转换大部分的基本数据类型,除了decimal
和string
,decimal
我们几乎不用,而string
我们使用Encoding
类来转换1
byte[] bytes = BitConverter.GetBytes(99);
-
字节数组转各类型
将字节数组转换为各种类型时,根据类型的不同,方法名是不同的,但是方法名的规律很简单,基本就是
To + 类型
或者To + Int + 位数
第一个参数填入要转换的字节数组,第二个参数填入要从数组第几个开始读取(默认为0)1
2int 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
-
字符串以指定编码格式转字节
字符串 转换为 指定编码格式的字节数组 需要我们
Encoding.编码格式.GetBytes()
,一般在游戏开发中我们都使用UTF-8
这个编码格式1
byte[] strBytes = Encoding.UTF8.GetBytes("字符串测试");
-
字节数组以指定编码格式转字符串
字节数组 依据指定编码格式转换为 字符串 需要我们
Encoding.编码格式.GetString()
,一般在游戏开发中我们都使用UTF-8
这个编码格式
第一个参数填入要转换的字节数组,第二个参数填入要从数组第几个开始读取(默认0),第三个参数填入要读取几个字节(默认全部读取)1
2string s = Encoding.UTF8.GetString(strBytes, 0, strBytes.Length);
print(s);