fread

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

Описание

пример

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

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

пример

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

пример

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

пример

A = fread(___,skip) пропускает количество байтов или битов, заданных skip после чтения каждого значения в файле.

пример

A = fread(___,machinefmt) дополнительно задает порядок для чтения байтов или битов в файле.

[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- n матрица, заполнил порядка следования столбцов. n может быть Inf, но m не может.

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

Форма precision Входной параметрОписание
sourceВходные значения имеют класс, заданный source. Выходная матрица A класс double.
Пример: 'int16'
source=> outputВходные значения имеют класс, заданный source. Класс выходной матрицы, A, задан output.
Пример: 'int8=>char'
*sourceВходные значения и выходная матрица, A, имеют класс, заданный source. Для bitn или ubitn точность, выход имеет самый маленький класс, который может содержать вход.
Пример: '*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)

'ubitn'

1n≤ 64

Целые числа, подписанные

'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)

'bitn'

1n≤ 64

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

'single'

32 (4)

'double'

64 (8)

'float'

32 (4)

'float32'

32 (4)

'float64'

64 (8)

'real*4'

32 (4)

'real*8'

64 (8)

'characters'

'char*1'

8 (1)

'char'

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

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

Примечание

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

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

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

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

Порядок для чтения байтов в файле в виде вектора символов или строкового скаляра. Задайте machinefmt как одно из значений в таблице, которая следует. Для bitn и ubitn точность, machinefmt задает порядок для чтения битов в байте, но порядок для чтения байтов остается ваш системный порядок байтов.

'n' или 'native'

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

'b' или 'ieee-be'

Упорядоченное расположение с обратным порядком байтов

'l' или 'ieee-le'

Упорядоченное расположение с прямым порядком байтов

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

Упорядоченное расположение обратного порядка байтов, 64-битный долгий тип данных

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

Упорядоченное расположение прямого порядка байтов, 64-битный долгий тип данных

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

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

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

свернуть все

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

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

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

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