You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
trezor-firmware/core/embed/rust/src/strutil.rs

43 lines
1.1 KiB

pub fn hexlify(data: &[u8], buffer: &mut [u8]) {
const HEX_LOWER: [u8; 16] = *b"0123456789abcdef";
let mut i: usize = 0;
for b in data.iter().take(buffer.len() / 2) {
let hi: usize = ((b & 0xf0) >> 4).into();
let lo: usize = (b & 0x0f).into();
buffer[i] = HEX_LOWER[hi];
buffer[i + 1] = HEX_LOWER[lo];
i += 2;
}
}
pub fn format_i64(num: i64, buffer: &mut [u8]) -> Option<&str> {
let mut i = 0;
let mut num = num;
let negative = if num < 0 {
num = -num;
true
} else {
false
};
while num > 0 && i < buffer.len() {
buffer[i] = b'0' + ((num % 10) as u8);
num /= 10;
i += 1;
}
match i {
0 => Some("0"),
_ if num > 0 => None,
_ if negative && i == buffer.len() => None,
_ => {
if negative {
buffer[i] = b'-';
i += 1;
}
let result = &mut buffer[..i];
result.reverse();
Some(unsafe { core::str::from_utf8_unchecked(result) })
}
}
}