实际上,如果有两个不同的u8,则传统解决方案涉及逐位操作,特别是移位和逐位OR。 这需要零堆分配,非常有效。
letnumber=()| vector[1] as u16 )8)| vector[1] as u16;
图解:
A0 B0
-------- --------
|XXXXXXXX| |YYYYYYYY|
------- -------
| |
A1=A0 as u16 | B1=B0 as u16 |
----------------v
| 0000000 xxxxxxxx|| 0000000 yyyyyyyy |
-------------请参阅
| |
A2=A1 8 | |
------------v|
|XXXXXXXX00000000| |
--------|
|-|
----------- -或
_
|
V=A2 | B1 |
---------- ----v
|XXXXXXXXYYYYYYYY|
-----------------
但是,你真的把你的问题看得很狭隘。 没有两个u8。 是[u8]。
扩展创建字节;
use byteorder :3360 { byteorder,LittleEndian};
fn main () )。
let data=[ 1,16 ];
letv=little endian :3360 read _ u16 (data;
println! ()、v );
}
当聪明的狼想通过缓冲处理读取时,它展示了它的强大功能:
扩展创建字节;
use byteorder : { big endian,LittleEndian,ReadBytesExt};
fn main () )。
let data=[ 1,16,1,2 ];
let mut current=data[.];
let v1=current.read _ u 16:3360 (;
let v2=current.read _ u 16:3360 (;
println! () {:{: (、v1、v2 ); //ok(4097 )、ok (258 ) )。
}
正如您所见,您需要知道输入数据的endianness。
另请参阅:
原始帖子免费代码审查:
这里不需要to_vec。 请改为使用vec。
不需要指定大多数类型。
let vector=[ 1u 8,16 ].to _ vec (;
let vector0=format! ({:02x} ),vector[0];
let vector1=format! ({:02x} ),vector[1];
letmutvector _ combined=string :3360 new (;
vector _ combined=vector _ combined vector0. clone (;
vector _ combined=vector _ combined vector1. clone (;
let number=u 1633603360 from _ str _ radix (vector _ combined.to _ string (,16 ).unwrap );
添加时不需要克隆字符串后再引用。
不需要将字符串转换为字符串的另一个from_str_radix。
let vector0=format! ({:02x} ),vector[0];
let vector1=format! ({:02x} ),vector[1];
letmutvector _ combined=string :3360 new (;
vector _ combined=vector _ combined vector 0;
vector _ combined=vector _ combined vector 1;
let number=u 16:3360 from _ str _ radix (vector _ combined,16 ).unwrap );
不需要创建要添加的空字符串,只需使用vector0
let vector0=format! ({:02x} ),vector[0];
let vector1=format! ({:02x} ),vector[1];
let vector _ combined=vector0vector 1;
let number=u 16:3360 from _ str _ radix (vector _ combined,16 ).unwrap );
不需要创建两个字符串。 一个可以:
let vector_combined=format! () :02x ) :02x )、vector[0]、vector[1];
let number=u 16:3360 from _ str _ radix (vector _ combined,16 ).unwrap );
当然,这还不是正确的解决方案,但那更好。