计算机存储单位
- 字节和位: 一个英文字母通常占用一个字节(8位),这是因为大多数现代编码系统(如UTF-8)使用一个字节来表示一个字符。
- 存储单位换算:
- 1MB (兆字节) = 1024KB (千字节)
- 1KB = 1024字节
- 1MB = 1024 × 1024 = 1,048,576字节
- 1GB (吉字节) = 1,073,741,824字节
Rust编程语言中的数字类型
- 无符号整数 (u8, u16, u32, u64, u128):
- 这些类型用于存储非负整数。
- 它们的数值范围和所占用的字节数分别是:
- u8: 0 - 2^8 - 1 (1字节)
- u16: 0 - 2^16 - 1 (2字节)
- u32: 0 - 2^32 - 1 (4字节)
- u64: 0 - 2^64 - 1 (8字节)
- u128: 0 - 2^128 - 1 (16字节)
- 符号整数 (i8, i16, i32, i64, i128):
- 这些类型用于存储有符号整数,即可以为正也可以为负。
- 它们的数值范围和所占用的字节数分别是:
- i8: -2^7 - 2^7 - 1 (1字节)
- i16: -2^15 - 2^15 - 1 (2字节)
- i32: -2^31 - 2^31 - 1 (4字节)
- i64: -2^63 - 2^63 - 1 (8字节)
- i128: -2^127 - 2^127 - 1 (16字节)
- 动态取值范围类型 (usize, isize):
- 这些类型的取值范围取决于机器的字长(32位或64位)。
- usize和isize分别用于存储内存地址和内存偏移量。
- 它们的取值范围和所占用的字节数分别是:
- usize: 0 - 2^32 - 1 或 0 - 2^64 - 1 (4或8字节)
- isize: -2^31 - 2^31 - 1 或 -2^63 - 2^63 - 1 (4或8字节)
- 浮点数类型 (f32, f64):
- 这些类型用于存储浮点数,即小数。
- 它们的位数和数值范围分别是:
- f32: 单精度32位浮点数,至少6位有效数字
- f64: 双精度64位浮点数,至少15位有效数字
Rust中的字面量和类型后缀
- 在Rust中,可以在数字字面量后面直接加上类型后缀来指定类型,例如
42u32
表示一个u32
类型的数值。 - 如果不加指定类型,编译器会默认推断为
i32
类型。 - 十六进制、八进制和二进制字面量分别以
0x
、0o
和0b
开头。 - 还可以使用字节字面量,例如
b'*'
,它等价于数值42u8
。
数据类型转换
- 字符串和字节序列之间的转换在Rust中非常常见,可以使用各种方法来实现这些转换,例如:
String::from(s)
或s.to_string()
或s.to_owned()
可以将&str
转换为String
。s.as_bytes()
可以将&str
转换为&[u8]
。s.as_bytes().to_vec()
或s.as_bytes().to_owned()
可以将&str
转换为Vec<u8>
。&s
如果可能,可以使用&s
来转换String
为&str
;否则使用s.as_str()
。s.into_bytes()
可以将String
转换为Vec<u8>
。s.to_vec()
或s.to_owned()
可以将&[u8]
转换为String
,但要注意这需要字符串是有效的UTF-8编码。String::from_utf8(s).unwrap()
可以将&[u8]
转换为String
,但这通常不是一个安全的做法,因为它假设数据是有效的UTF-8编码,如果数据不是有效的UTF-8,这将引发错误。