alchemy/examples/convert_f32.rs
Jason Travis Smith aa4bb78f66 Vector types are now Transmutable.
A Vector can now be converted to and from bytes of data.
I'm not entirely sure that the structure bytes do not have to
be handled for endianess, but the underlying basic types are
correctly handled.

Tests and and example have also be created. The tests lib file was split
into a converter test file and a transmutable test file.
2016-01-07 05:10:50 -05:00

109 lines
2.6 KiB
Rust

#![feature(convert)]
extern crate alchemy;
use alchemy::F32_BYTES;
use alchemy::{Converter, Endianess, PlatformEndian, Transmutable};
fn use_converter()
{
let num: f32;
let final_num: f32;
let mut buffer: [u8; F32_BYTES];
// Initialize the variables.
num = 6.291985f32;
buffer = [0u8; F32_BYTES];
println!("Converting the value {} into and out of an array of bytes.", num);
println!("Buffer starts as: {}", stringify_array(&buffer));
// Convert the floating point number into an array of bytes.
PlatformEndian::f32_to_bytes(&mut buffer, num);
println!("Buffer contains: {}", stringify_array(&buffer));
// Convert the array of bytes into a floating point number.
final_num = PlatformEndian::bytes_to_f32(&buffer);
println!("The buffer converts back to: {}", final_num);
}
pub fn use_transmutable()
{
let num: f32;
let final_num: f32;
let endianess: Endianess;
let mut buffer: [u8; F32_BYTES];
// Initialize the variables.
num = 6.291985f32;
buffer = [0u8; F32_BYTES];
endianess = Endianess::PLATFORM;
println!("Converting the value {} into and out of an array of bytes.", num);
println!("Buffer starts as: {}", stringify_array(&buffer));
// Convert the floating point number into an array of bytes.
num.to_bytes(&mut buffer, endianess);
println!("Buffer contains: {}", stringify_array(&buffer));
// Convert the array of bytes into a floating point number.
final_num = f32::from_bytes(&buffer, endianess);
println!("The buffer converts back to: {}", final_num);
}
/// This just help pretty up the printing of an array of bytes.
fn stringify_array(buffer: &[u8]) -> String
{
let mut result: String;
let mut count: usize;
// Create a new string that starts with just
// the array opening bracket.
result = String::new();
result.push_str("[");
// Loop through the buffer keeping track
// of our place in it.
count = 0usize;
for byte in buffer
{
// Handle priting the last value differently.
if count >= buffer.len() - 1
{
result.push_str(byte.to_string().as_str());
}
else
{
result.push_str(byte.to_string().as_str());
result.push_str(", ");
}
// Mark that we are going to look at
// the next byte in the array.
count += 1;
}
// Add the array closing bracket and
// return the new String.
result.push_str("]");
result
}
pub fn main()
{
println!("Using converter:");
use_converter();
println!("");
println!("Using transmutable:");
use_transmutable();
}