Languages on different architectures might serialize the 32-bit unsigned int 15
as the byte sequences 00 00 00 0F
(big-endian) or 0F 00 00 00
(little-endian) but network protocols generally prefer the former.
pub fn to_network_byte_order(n: u32) -> u32 { n.to_be() } pub fn from_network_byte_order(n: u32) -> u32 { u32::from_be(n) } #[cfg(test)] mod test { use super::*; #[test] fn test_to_network_byte_order() { let expected: u32 = 0xFFAABBCC; let nbo = to_network_byte_order(expected); if cfg!(target_endian = "big") { assert_eq!(expected, nbo); } else { assert_eq!(expected.swap_bytes(), nbo); } let actual = from_network_byte_order(nbo); assert_eq!(expected, actual); } }
u32
is a 32-bit unsigned integer; i32
is the signed version.
This post is just a code snippet written by someone getting started.
No promises are made about code quality.
Version: rustc 1.0.0-beta.4 (850151a75 2015-04-30) (built 2015-04-30)
No comments:
Post a Comment
All comments are moderated