lapawa Geschrieben December 23, 2019 at 07:32 Geschrieben December 23, 2019 at 07:32 Hallo zusammen, ich stolpere gerade darüber, dass bei dem OLED Bricklet (version 1.1, sorry) die Methode write_line() als Parameter den Typ String verlangt. https://www.tinkerforge.com/en/doc/Software/Bricklets/OLED128x64_Bricklet_Rust.html#Oled128x64Bricklet::write_line Bytes in einem String sind in Rust immer utf8 konform. Das verhindert mir leider auf alle Zeichen der OLED Zeichentabelle zuzugreifen. https://doc.rust-lang.org/std/string/struct.String.html Im Quelltext des Bricklets finde ich weitere Zeichen: https://github.com/Tinkerforge/oled-128x64-bricklet/blob/master/software/src/font.inc Könnt ihr vielleicht eine weitere Methode bereitstellen, die als Parameter einen &[u8] Vector bekommt? Die ließe sich mit jedem String durch ein .as_bytes() verwenden und ungültige UTF8 Sequencen könnten ebenfalls dargestellt werden. Gruss Tim Zitieren
rtrbt Geschrieben January 13, 2020 at 10:11 Geschrieben January 13, 2020 at 10:11 Moin, Das ist leider etwas ungünstig dokumentiert, aber die Rust-Bindings mappen die ersten 256 UTF-8 Codepoints auf auf die möglichen Werte eines Bytes um. In den Bindings sieht das so aus: fn try_to_le_byte_vec(s: String, max_len: usize) -> Result<Vec<u8>, BrickletError> { if s.chars().any(|c| c as u32 > 255) { return Err(BrickletError::InvalidParameter); } let bytes: Vec<u8> = s.chars().map(|c| c as u8).collect(); if bytes.len() > max_len { Err(BrickletError::InvalidParameter) } else { let mut result = vec![0u8; max_len]; result[0..bytes.len()].copy_from_slice(&bytes); Ok(result) } } Das heißt du solltest das Characterset mit \u{01} bis \u{FF} benutzen können. Edit: Brainfart, \u{00} terminiert den String (aus Bricklet-API-Sicht), \u{01} ist das erste sinnvolle Zeichen. Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.