Я связываю некоторые функции C с ржавчиной.Я столкнулся с небольшой проблемой, и я хотел бы знать правильный способ ее решения в ржавчине.
Вот функция, которую я хотел бы вызвать из C API:
extern "C" {
pub fn H5Aread(attr_id: hid_t, type_id: hid_t, buf: *mut c_char) -> herr_t;
}
Функция читает что-то из файла и сохраняет его в buf
.
Итак, я создал этот буфер в векторе:
let len: u64 = get_the_length();
let attr_raw_string: Vec<c_char> = Vec::new(); // c_char is equivalent to i8
attr_raw_string.resize(len as usize, 0);
let attr_raw_string_ptr = attr_raw_string.as_mut_ptr();
let read_error = H5Aread(attr_obj, attr_type, attr_raw_string_ptr);
if read_error < 0 {
panic!("...");
}
let result_str: String = String::from_utf8(attr_raw_string);
Теперь это не компилируется, потому что from_utf8
ожидает Vec<u8>
, но Vec<c_char>
- это Vec<i8>
.
Есть ли способ исправить это без необходимости каждый раз копировать и приводить строку как новый тип u8
?