Rust结构体实例化时初始化[u8;128]字段及获取其大小方法
解决方案
一、直接用字符串初始化结构体A的字段a
有两种常用方式可以实现实例化时直接用字符串初始化a字段:
方式1:实现结构体的构造函数(推荐)
给结构体A添加一个new方法,内部处理字符串到数组的复制逻辑,同时自动处理字符串长度超过128的边界情况:
struct A { a: [u8; 128], } impl A { // 接收字符串引用,返回初始化后的A实例 fn new(s: &str) -> Self { let mut arr = [0u8; 128]; let bytes = s.as_bytes(); // 取字符串长度和数组长度的较小值,避免越界 let copy_len = bytes.len().min(128); arr[..copy_len].copy_from_slice(&bytes[..copy_len]); Self { a: arr } } } fn main() { let strr = String::from("AAAAAAAAAAAAAAAAAAAA"); // 直接通过构造函数初始化 let a_obj = A::new(&strr); println!("{:?}", a_obj.a); }
方式2:使用array::from_fn直接初始化数组
利用标准库的array::from_fn函数,逐个元素生成数组内容:
use std::array; struct A { a: [u8; 128], } fn main() { let strr = String::from("AAAAAAAAAAAAAAAAAAAA"); let bytes = strr.as_bytes(); let a_obj = A { // 遍历数组索引,存在则取对应字节,否则补0 a: array::from_fn(|idx| bytes.get(idx).copied().unwrap_or(0)), }; println!("{:?}", a_obj.a); }
二、获取字段a的字节数组大小
获取总字节数
可以用std::mem::size_of_val函数直接获取数组占用的字节数:
// 在main函数中添加 let byte_size = std::mem::size_of_val(&a_obj.a); println!("字段a的字节大小: {} bytes", byte_size); // 输出128
获取数组元素个数
如果需要数组的元素数量(因为每个u8占1字节,所以元素数等于字节数),有两种方式:
- 使用数组的关联常量
LEN:
let element_count = <[u8; 128]>::LEN; println!("字段a的元素个数: {}", element_count); // 输出128
- 通过实例字段直接调用
len方法:
let element_count = a_obj.a.len(); println!("字段a的元素个数: {}", element_count); // 输出128
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

