exponenta event banner

освобожденный

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

Описание

пример

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

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

пример

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

пример

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

пример

A = fread(fileID,sizeA,precision,skip,machinefmt) дополнительно указывает порядок чтения байтов или битов в файле. 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 бита за раз в системе little-endian, ваши результаты появляются в неправильном порядке.

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'

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)

'bitn'

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 является bitn или ubitn, то fread возвращает частичный результат для конечного значения.

Примечание

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

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

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

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

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

'n' или 'native'

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

'b' или 'ieee-be'

Заказ Big-endian

'l' или 'ieee-le'

Заказ Little-endian

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

Порядок Big-endian, 64-разрядный тип данных

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

Упорядочивание Little-endian, 64-разрядный длинный тип данных

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

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

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

свернуть все

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

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

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

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