fread

Считайте данные из двоичного файла

Описание

пример

A = fread(fileID) считывает данные из открытого двоичного файла в вектор-столбец A и помещает указатель на файл в конец файла маркера. Двоичный файл обозначается идентификатором файла fileID. Использовать fopen чтобы открыть файл и получить fileID значение. Когда вы закончите чтение, закройте файл, позвонив fclose(fileID).

A = fread(fileID,sizeA) считывает данные файла в массив, A, с размерностями, sizeA, и помещает указатель на файл после последнего считанного значения. fread заполняет A в порядке столбца.

пример

A = fread(fileID,sizeA,precision) интерпретирует значения в файле в соответствии с формой и размером, описанными precision. The sizeA аргумент необязателен.

пример

A = fread(fileID,sizeA,precision,skip) пропускает количество байтов или бит, заданное skip после чтения каждого значения в файле. The sizeA аргумент необязателен.

пример

A = fread(fileID,sizeA,precision,skip,machinefmt) дополнительно задает порядок чтения байтов или бит в файле. The sizeA и skip аргументы необязательны.

[A,count] = fread(___) дополнительно возвращает количество символов fread читает в A. Можно использовать этот синтаксис с любым из входных параметров предыдущих синтаксисов.

Примеры

свернуть все

Запись вектора с девятью элементами в файл сэмплирования, nine.bin.

fileID = fopen('nine.bin','w');
fwrite(fileID,[1:9]);
fclose(fileID);

Считайте все данные в файле в вектор класса double. По умолчанию fread читает файл по 1 байту за раз, интерпретирует каждый байт как 8-битное беззнаковое целое число (uint8), и возвращает double массив.

fileID = fopen('nine.bin');
A = fread(fileID)
A = 9×1

     1
     2
     3
     4
     5
     6
     7
     8
     9

fread возвращает вектор-столбец с одним элементом для каждого байта в файле.

Просмотр информации о A.

whos A
  Name      Size            Bytes  Class     Attributes

  A         9x1                72  double              

Закройте файл.

fclose(fileID);

Создайте файл с именем doubledata.bin, содержащего девять значений двойной точности.

fileID = fopen('doubledata.bin','w');
fwrite(fileID,magic(3),'double');
fclose(fileID);

Откройте файл, doubledata.bin, и считайте данные в файле в массив 3 на 3, A. Укажите, что исходные данные являются классами double.

fileID = fopen('doubledata.bin');
A = fread(fileID,[3 3],'double')
A = 3×3

     8     1     6
     3     5     7
     4     9     2

Закройте файл.

fclose(fileID);

Создайте файл с именем nine.bin, содержащая значения от 1 до 9. Запишите данные как uint16 значения.

fileID = fopen('nine.bin','w');
fwrite(fileID,[1:9],'uint16');
fclose(fileID);

Считайте первые шесть значений в массив 3 на 2. Укажите, что исходные данные являются классами uint16.

fileID = fopen('nine.bin');
A = fread(fileID,[3,2],'uint16')
A = 3×2

     1     4
     2     5
     3     6

fread возвращает массив заполненный столбец с первыми шестью значениями из файла, nine.bin.

Вернитесь к началу файла.

frewind(fileID)

Считывайте два значения за раз и пропускайте одно значение перед чтением следующих значений. Задайте этот формат используя precision значение, '2*uint16'. Потому что данные являются классами uint16, одно значение представлено 2 байтами. Поэтому задайте skip аргумент как 2.

precision = '2*uint16';
skip = 2;
B = fread(fileID,[2,3],precision,skip)
B = 2×3

     1     4     7
     2     5     8

fread возвращает массив 2 на 3, заполненный столбцом со значениями из nine.bin.

Закройте файл.

fclose(fileID);

Создайте файл с двоичными закодированными десятичными значениями (BCD).

str = ['AB'; 'CD'; 'EF'; 'FA'];

fileID = fopen('bcd.bin','w');
fwrite(fileID,hex2dec(str),'ubit8');
fclose(fileID);

Считывайте по 1 байту за раз.

fileID = fopen('bcd.bin');
onebyte = fread(fileID,4,'*ubit8');

Отображение значений BCD.

disp(dec2hex(onebyte))
AB
CD
EF
FA

Вернитесь к началу файла с помощью frewind. Если вы читаете по 4 бита за раз на маленькой эндовой системе, ваши результаты появляются в неправильном порядке.

frewind(fileID)

err = fread(fileID,8,'*ubit4');
disp(dec2hex(err))
B
A
D
C
F
E
A
F

Вернитесь к началу файла с помощью frewind. Считывайте данные по 4 бита за раз, как и прежде, но задайте большой-эндовый заказ, чтобы отобразить правильные результаты.

frewind(fileID)

correct = fread(fileID,8,'*ubit4','ieee-be');
disp(dec2hex(correct))
A
B
C
D
E
F
F
A

Закройте файл.

fclose(fileID);

Входные параметры

свернуть все

Идентификатор файла открытого двоичного файла, заданный как целое число. Перед чтением файла с fread, вы должны использовать fopen чтобы открыть файл и получить fileID.

Типы данных: double

Размерности массива выхода, A, заданный как Inf, целое число или двухэлементный вектор-строка.

Форма sizeA ВходРазмерности массива выхода, A
InfВектор-столбец с каждым элементом, содержащим значение в файле.
nВектор-столбец с n элементы.
[m,n]m-by- n матрица, заполненная в порядке столбца. n можно Inf, но m невозможно.

Класс и размер в битах считываемых значений, заданных в виде вектора символов или строкового скаляра в одной из следующих форм. Опционально вход задает класс выходной матрицы, A.

Форма precision ВходОписание
sourceВходные значения имеют класс, заданный как source. Выходные матричные A является классом double.
Пример: 'int16'
source=> outputВходные значения имеют класс, заданный как source. Класс выходной матрицы, A, определяется output.
Пример: 'int8=>char'
* sourceЗначения входа и выходная матрица, A, являются классом, заданным source. Для битовых n или ubit n precisions, выход имеет наименьший класс, который может содержать вход.
Пример: '*ubit18'
Это эквивалентно 'ubit18=>uint32'

N* source или
N* source=> output

Чтение N значения перед пропуском количества байтов, заданного skip аргумент.
Пример: '4*int8'

В следующей таблице показаны возможные значения для source и output.

Тип значенияТочностьБиты (байты)

Целые числа, без знака

'uint'

32 (4)

'uint8'

8 (1)

'uint16'

16 (2)

'uint32'

32 (4)

'uint64'

64 (8)

'uchar'

8 (1)

'unsigned char'

8 (1)

'ushort'

16 (2)

'ulong'

32 (4)

'ubit <reservedrangesplaceholder0>'

1n64

Целые числа, со знаком

'int'

32 (4)

'int8'

8 (1)

'int16'

16 (2)

'int32'

32 (4)

'int64'

64 (8)

'integer*1'

8 (1)

'integer*2'

16 (2)

'integer*4'

32 (4)

'integer*8'

64 (8)

'schar'

8 (1)

'signed char'

8 (1)

'short'

16 (2)

'long'

32 (4)

'бит n'

1n64

Числа с плавающей запятой

'single'

32 (4)

'double'

64 (8)

'float'

32 (4)

'float32'

32 (4)

'float64'

64 (8)

'real*4'

32 (4)

'real*8'

64 (8)

Персонажи

'char*1'

8 (1)

'char'

MATLAB®char тип не является фиксированным размером, и количество байтов зависит от схемы кодирования, сопоставленной с файлом. Установите кодировку с fopen.

Для большинства значений source, если fread достигает конца файла перед чтением полного значения, оно не возвращает результат для окончательного значения. Однако, если source бит- n или ubit n, затем fread возвращает частичный результат для окончательного значения.

Примечание

Чтобы сохранить NaN и Inf значения в MATLAB, чтение и запись данных классов double или single.

Типы данных: char | string

Количество байтов, которые нужно пропустить после чтения каждого значения, заданное как скаляр. Если вы задаете precision бит- n или ubit n, задайте skip в битах.

Используйте skip аргумент для чтения данных из несмежных полей в записях фиксированной длины.

Порядок чтения байтов в файле, заданный как вектор символов или строковый скаляр. Задайте machinefmt как одно из значений в следующей таблице. Для битовых n и ubit n точности, machinefmt задает порядок чтения бит в байте, но порядок чтения байтов остается упорядоченным расположением системного байта.

'n' или 'native'

Ваш системный байт упорядоченного расположения (по умолчанию)

'b' или 'ieee-be'

Большой-эндовый упорядоченное расположение

'l' или 'ieee-le'

Little-endian упорядоченное расположение

's' или 'ieee-be.l64'

Большой-эндовый упорядоченное расположение, 64-битный длинный тип данных

'a' или 'ieee-le.l64'

Little-endian ordering, 64-битный длинный тип данных

По умолчанию все поддерживаемые в настоящее время платформы используют малоэндовый порядок для новых файлов. Существующие двоичные файлы могут использовать или большое-эндовый или маленькое-эндовый упорядоченное расположение.

Типы данных: char | string

Выходные аргументы

свернуть все

Данные файла, возвращенные как вектор-столбец. Если вы указали sizeA аргумент, затем A - матрица заданного размера. Данные в A является классом double если вы не задаете другой класс в precision аргумент.

Количество прочитанных символов, возвращенных в виде скалярного значения.

Расширенные возможности

.
Представлено до R2006a