城市直播房产教育博客汽车
快传网
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

Rust字节序操作byteorder

10月2日 眸中星投稿
  字节序操作byteorder
  字节数组操作是一个高频的操作,rust生态中有bytes和byteorder两个第三方库来处理。两个库的操作方法基本类似,我们选择byteorder来做介绍。
  在byteorder中定义了BigEndian和LittleEndian两个枚举类,这两个枚举类分别实现了byteorder::ByteOrder个trait。
  byteorder::ByteOrder提供发了丰富的接口来实现常用类型转成字节数组。pubtraitByteOrder:CloneCopyDebugDefaultEqHashOrdPartialEqPartialOrdSealed{fnreadu16(buf:〔u8〕)u16;fnreadu32(buf:〔u8〕)u32;fnreadu64(buf:〔u8〕)u64;fnreadu128(buf:〔u8〕)u128;fnreaduint(buf:〔u8〕,nbytes:usize)u64;fnreaduint128(buf:〔u8〕,nbytes:usize)u128;fnwriteu16(buf:mut〔u8〕,n:u16);fnwriteu32(buf:mut〔u8〕,n:u32);fnwriteu64(buf:mut〔u8〕,n:u64);fnwriteu128(buf:mut〔u8〕,n:u128);fnwriteuint(buf:mut〔u8〕,n:u64,nbytes:usize);fnwriteuint128(buf:mut〔u8〕,n:u128,nbytes:usize);fnreadu16into(src:〔u8〕,dst:mut〔u16〕);fnreadu32into(src:〔u8〕,dst:mut〔u32〕);fnreadu64into(src:〔u8〕,dst:mut〔u64〕);fnreadu128into(src:〔u8〕,dst:mut〔u128〕);fnwriteu16into(src:〔u16〕,dst:mut〔u8〕);fnwriteu32into(src:〔u32〕,dst:mut〔u8〕);fnwriteu64into(src:〔u64〕,dst:mut〔u8〕);fnwriteu128into(src:〔u128〕,dst:mut〔u8〕);fnfromsliceu16(numbers:mut〔u16〕);fnfromsliceu32(numbers:mut〔u32〕);fnfromsliceu64(numbers:mut〔u64〕);fnfromsliceu128(numbers:mut〔u128〕);fnfromslicef32(numbers:mut〔f32〕);fnfromslicef64(numbers:mut〔f64〕);fnreadu24(buf:〔u8〕)u32{。。。}fnreadu48(buf:〔u8〕)u64{。。。}fnwriteu24(buf:mut〔u8〕,n:u32){。。。}fnwriteu48(buf:mut〔u8〕,n:u64){。。。}fnreadi16(buf:〔u8〕)i16{。。。}fnreadi24(buf:〔u8〕)i32{。。。}fnreadi32(buf:〔u8〕)i32{。。。}fnreadi48(buf:〔u8〕)i64{。。。}fnreadi64(buf:〔u8〕)i64{。。。}fnreadi128(buf:〔u8〕)i128{。。。}fnreadint(buf:〔u8〕,nbytes:usize)i64{。。。}fnreadint128(buf:〔u8〕,nbytes:usize)i128{。。。}fnreadf32(buf:〔u8〕)f32{。。。}fnreadf64(buf:〔u8〕)f64{。。。}fnwritei16(buf:mut〔u8〕,n:i16){。。。}fnwritei24(buf:mut〔u8〕,n:i32){。。。}fnwritei32(buf:mut〔u8〕,n:i32){。。。}fnwritei48(buf:mut〔u8〕,n:i64){。。。}fnwritei64(buf:mut〔u8〕,n:i64){。。。}fnwritei128(buf:mut〔u8〕,n:i128){。。。}fnwriteint(buf:mut〔u8〕,n:i64,nbytes:usize){。。。}fnwriteint128(buf:mut〔u8〕,n:i128,nbytes:usize){。。。}fnwritef32(buf:mut〔u8〕,n:f32){。。。}fnwritef64(buf:mut〔u8〕,n:f64){。。。}fnreadi16into(src:〔u8〕,dst:mut〔i16〕){。。。}fnreadi32into(src:〔u8〕,dst:mut〔i32〕){。。。}fnreadi64into(src:〔u8〕,dst:mut〔i64〕){。。。}fnreadi128into(src:〔u8〕,dst:mut〔i128〕){。。。}fnreadf32into(src:〔u8〕,dst:mut〔f32〕){。。。}fnreadf32intounchecked(src:〔u8〕,dst:mut〔f32〕){。。。}fnreadf64into(src:〔u8〕,dst:mut〔f64〕){。。。}fnreadf64intounchecked(src:〔u8〕,dst:mut〔f64〕){。。。}fnwritei8into(src:〔i8〕,dst:mut〔u8〕){。。。}fnwritei16into(src:〔i16〕,dst:mut〔u8〕){。。。}fnwritei32into(src:〔i32〕,dst:mut〔u8〕){。。。}fnwritei64into(src:〔i64〕,dst:mut〔u8〕){。。。}fnwritei128into(src:〔i128〕,dst:mut〔u8〕){。。。}fnwritef32into(src:〔f32〕,dst:mut〔u8〕){。。。}fnwritef64into(src:〔f64〕,dst:mut〔u8〕){。。。}fnfromslicei16(src:mut〔i16〕){。。。}fnfromslicei32(src:mut〔i32〕){。。。}fnfromslicei64(src:mut〔i64〕){。。。}fnfromslicei128(src:mut〔i128〕){。。。}}usebyteorder::{ByteOrder,LittleEndian};letmutbuf〔0;4〕;LittleEndian::writeu32(mutbuf,1000000);asserteq!(1000000,LittleEndian::readu32(buf));usebyteorder::{ByteOrder,BigEndian};letmutbuf〔0;2〕;BigEndian::writei16(mutbuf,5000);asserteq!(5000,BigEndian::readi16(buf));usebyteorder::{ByteOrder,BigEndian};letmutnumbers〔5,65000〕;BigEndian::fromslicei64(mutnumbers);asserteq!(numbers,〔5i64。tobe(),65000i64。tobe()〕);
  选择byteorder的另一个重要原因是,byteorder定义了另外两个ReadBytesExt和WriteBytesExttrait,
  ReadBytesExt继承了std::io::Readtrait,然后所有实现std::io::Read的类,将免费获取ReadBytesExt。WriteBytesExt继承了std::io::Writetrait,然后所有实现std::io::Write的类,将免费获取WriteBytesExt。usestd::io::Cusebyteorder::{BigEndian,ReadBytesExt};letmutrdrCursor::new(vec!〔2,5,3,0〕);Cursor〔u8〕实现了std::io::Read所有免费实现了ReadBytesExtasserteq!(517,rdr。readu16::BigEndian()。unwrap());asserteq!(768,rdr。readu16::BigEndian()。unwrap());usestd::f32;usestd::io::Cusebyteorder::{BigEndian,ReadBytesExt};letmutrdrCursor::new(vec!〔0x40,0x49,0x0f,0xdb,0x3f,0x80,0x00,0x00,〕);letmutdst〔0。0;2〕;rdr。readf32into::BigEndian(mutdst)。unwrap();读取float32数组asserteq!(〔f32::consts::PI,1。0〕,dst);usebyteorder::WriteBytesEletmutwtrVec::new();Vec〔u8〕实现了std::io::Write免费实现了WriteBytesExtwtr。writeu8(2)。unwrap();wtr。writeu8(5)。unwrap();asserteq!(wtr,b);自己实现序列化和反序列化struct〔derive(Debug)〕pubstructPerson{features:HashMapi8,Vecf32,featuresize:u16,channelbit:u64,}implPerson{fnsize(self)usize{letlengthself。features。len();iflength1{return7}128(1self。featuresizeasusize4)length}pubfnmarshal(self)OptionVecu8{ifself。size()11{returnNone}letmutbufVec::withcapacity(self。size());buf。writeu8(self。features。len()asu8);buf。writeu16::LittleEndian(self。featuresize);buf。writeu64::LittleEndian(self。channelbit);for(k,v)inself。features{buf。writeu8(kasu8);unsafe{letbstd::slice::fromrawparts(v。asptr()asconstu8,v。len()4);buf。writeall(b);writeall方法来着std::io::Writetrait}}Some(buf)}pubfnunmarshal(mutself,b:〔u8〕)std::result::Result(),std::io::Error{ifb。len()11{returnErr(std::io::Error::new(std::io::ErrorKind::Other,toshort))}letmutrdrCursor::new(b);letlengthrdr。readu8()?;self。featuresizerdr。readu16::LittleEndian()?;self。channelbitrdr。readu64::LittleEndian()?;forin0。。length{letkeyrdr。readu8()?;letmutfeaturevec!〔0。0;self。featuresizeasusize〕;rdr。readf32into::LittleEndian(mutfeature)?;self。features。insert(keyasi8,feature);}Ok(())}}fnmain(){letmutfeaturesHashMap::new();features。insert(1i8,Vec::from(〔2。9;2048〕));features。insert(2i8,Vec::from(〔2。9;2048〕));letpersonPerson{features,featuresize:2048,channelbit:0};letbytesperson。marshal()。unwrap();letmutpersonbPerson{features:HashMap::new(),featuresize:2048,channelbit:0};personb。unmarshal(bytes)。unwrap();println!({:?},person);println!({:?},personb);asserteq!(person。features。get(1)。unwrap(),personb。features。get(1)。unwrap())}
投诉 评论 转载

直降300!OPPOReno6Pro游戏体验大升级,等等党赢说起OPPOReno6Pro这款手机,大家应该不陌生。三个月凭借着轻薄精致的机身设计,以及出色强悍的影像实力,一发布就成为了爆款机型,火遍全网。尽管现在已经发布三个月时间了,但……APSC微单性价比之王索尼6000很多朋友问,我想玩一玩摄影,有没有推荐的相机,性价比能高点的,像素大点的,那么我现在就给大家介绍一下这一位老面孔,那就是索尼6000。参数索尼6000,发布于201……从数据孤岛到超强大脑朝阳大悦城引领实体商业数据智能化进程对许多成熟的商业体来说,数据指导经营已由愿景变成了现实。可如何进一步挖掘数据价值,让它更加智能化地为项目决策与整体战略服务,是每个进入数据3。0时代的购物中心都面临的问题。而作……特斯拉汽车在美国取消附赠移动充电线,并单独出售275400美据electrek报道,特斯拉不再为每辆车配备移动充电线。取而代之的是,开始在官网单独出售1级和2级充电线,售价分别为275美元(约1754。5元人民币)和400美元(约255……微信29万被无故冻结,申诉十几次均被驳回,客服所有权归我王女士最近被腾讯客服威胁了,自己微信上多达30万无缘无故被冻结,现在哪怕是几毛钱都无法从账户提取出去。为了解决这件事,王女士多次找到腾讯客服讨要说法,没想到对方直接表示,王女士……Rust字节序操作byteorder字节序操作byteorder字节数组操作是一个高频的操作,rust生态中有bytes和byteorder两个第三方库来处理。两个库的操作方法基本类似,我们选择byteor……支撑海量数据!新存储时代分布式将成为破题密钥随着云计算、大数据、物联网等信息技术的快速发展和传统产业数字化的转型,新技术的应用与推广带来海量数据的规模化聚集。用户对存储系统的稳定性、性能和弹性扩展能力有着更高的期待,而传……手机出货量暴跌三成,三四年没换手机的比比皆是,啥原因导致的?随着互联网的高速发展,智能手机已经成为了人们不可或缺的电子产品,也是人们看新闻、刷视频以及娱乐交际通讯的工具,人手一部手机。曾几何时,对于年轻人来说,手机堪称年货,一年换新机的……徐直军华为已在2017年启动6G研究IT时报记者李丹琦6月3日,2021浦江创新论坛全体大会召开,华为公司副董事长、轮值董事长徐直军表示,华为已在2017年开启6G研究。2019年,全球首个5G商用网……深思挖矿就是挖坑来源:读特国家发改委在昨天举行的例行新闻发布会上宣布,将持续做好虚拟货币挖矿全链条治理工作,下一步将以产业式集中式挖矿、国有单位涉及挖矿和比特币挖矿为重点开展全面整治。……从大北回来,我发现有这么多App在后台围观我国庆最后一天,我带着手机相册里满满一沓照片上了从西宁回北京的火车,但是还来不及回看照片就陷进一个瞌睡里。这段时间里微信替我把照片复盘了好几遍,带定位权限的软件每五分钟看一……java实习生简历自我评价java实习生简历自我评价光飞逝,转眼我们的试用期就已经满了,在申请转正时大家知道怎么去写这个转正自我评价吗?下面是小编为大家分享的,欢迎大家来阅读!在一个新的工作……
美国CPC认证(亚马逊必备)儿童产品证书ampampamp儿天融信独家中标中国移动网络安全态势感知平台项目助力运营商智能刘士远人工智能产品需从临床实际出发助力优质医疗资源下沉下周见!小米神秘新机现身天生好看德国要求苹果等手机能用7年,这一要求能实现吗?扫黑风暴一夜爆火,腾讯视频VIP中P更是让人恼火过年送爸妈什么礼物好?索爱E52高端收音机安排上2022开年游戏界诞生三大收购案全球游戏厂商三足鼎立之势已成华为申请新专利智能机镜头配备可变性摄像头给老硬盘中的小姐姐换个新房铠侠XD10固态移动硬盘PSSD体新机传MIUI13长这样iPhone14mini被砍了iQO苹果或让你在戴口罩时直接用FaceID解锁iPhone
秦灭六国楚最无罪什么意思?这句话是谁说的?鸡枞菌应该怎么挑选呢鸡枞菌出现在几月份呢一周水果减肥食谱天瘦斤我为祖国点赞奢侈品背后的那些人惜败上海,辽宁到底怎么了没有花的情人节春季学期开学典礼校长演讲稿当你心存忧虑的时候,请记住这三点深度稀土精矿涨价议案终获通过,北方稀土是最后赢家吗?公司申请书三年级快乐的暑假作文400字

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁