TL; DR есть веская причина не предоставлять функцию read_usize
, поскольку она не согласована на разных архитектурах ЦП.
Это плохая идея. Обычно у вас есть какой-то протокол, который вы пытаетесь десериализовать. Этот формат не должен зависеть от архитектуры процессора, и поэтому вы не можете прочитать размер файла, потому что он зависит от процессора.
Предположим, у вас есть простой протокол, в котором сначала у вас есть размер массива, а затем n
элементов.
+------+---------+
| size | ....... |
+------+---------+
Предположим, что протокол говорит, что ваш размер имеет длину 4 байта. Теперь вы хотите сделать то, что предложил Шепмастер, и прочитать размер в зависимости от вашей архитектуры.
В операционной системе x86_64 вы теперь прочитаете 8 байтов и, следовательно, проглотите первый элемент в вашем массиве.
На Atmega8 ваш usize будет 2 байта и, следовательно, займет только первые 2 байта вашего размера (который может быть нулевым, если имеется менее 65k элементов и порядок байтов BigEndian).
По этой причине нет функции read_usize
, и это правильно. Вам нужно решить, какой длины ваш размер, прочитать точное количество байтов из вашего среза, а затем нас as
, чтобы преобразовать это в usize
.