fread
이진 파일(Binary File)에서 데이터 읽기
구문
설명
예제
uint8형 데이터의 전체 파일 읽기
샘플 파일 nine.bin
에 요소를 9개 가진 벡터를 씁니다.
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);
배정밀도 데이터(Double Precision Data)의 전체 파일 읽기
9개의 배정밀도 값이 포함된, 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);
파일에서 선택된 행 또는 열 읽기
1~9의 값을 포함하는 nine.bin
이라는 이름의 파일을 만들고, uint16
값으로 데이터를 씁니다.
fileID = fopen('nine.bin','w'); fwrite(fileID,[1:9],'uint16'); fclose(fileID);
첫 6개 값을 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
파일의 첫 6개 값으로 구성된 배열을 반환합니다.
파일 시작 부분으로 돌아갑니다.
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
는 열 순서대로 nine.bin
의 값이 채워진 2×3 배열을 반환합니다.
파일을 닫습니다.
fclose(fileID);
BCD(Binary-Coded Decimal, 이진화 십진수) 값의 숫자 읽기
이진화 십진수(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);
입력 인수
fileID
— 파일 ID
정수
열려 있는 이진 파일의 파일 ID로, 정수로 지정됩니다. fread
로 파일을 읽으려면 fopen
을 사용하여 파일을 연 다음 fileID
를 가져와야 합니다.
데이터형: double
sizeA
— 출력 배열의 차원
Inf
(디폴트 값) | 정수 | 요소를 2개 가진 행 벡터
출력 배열 A
의 차원으로, 정수 Inf
또는 요소를 2개 가진 행 벡터로 지정됩니다.
sizeA 입력 형식 | 출력 배열 A 의 차원 |
---|---|
Inf | 각 요소에 파일의 각 값이 포함되는 열 벡터입니다. |
| n 개 요소가 포함되는 열 벡터입니다. |
| m ×n 행렬로, 열 순서대로 채워집니다. n 은 Inf 일 수 있지만, m 은 inf일 수 없습니다. |
precision
— 읽을 값의 클래스 및 크기
'uint8=>double'
(디폴트 값) | 문자형 벡터 또는 string형 스칼라
읽을 값의 클래스 및 크기(비트 수)로, 다음 형식 중 하나로 된 문자형 벡터나 string형 스칼라로 지정됩니다. 입력값으로 출력 행렬 A
의 클래스를 지정하는 것은 선택 사항입니다.
precision 입력 형식 | 설명 |
---|---|
source | 입력 값의 클래스는 source 에 지정된 클래스 형식을 갖습니다. 출력 행렬 A 의 클래스는 double 형입니다. 예: 'int16' |
source =>output | 입력 값의 클래스는 source 에 지정된 클래스 형식을 갖습니다. 출력 행렬 A 의 클래스는 output 에 지정됩니다. 예: 'int8=>char' |
* | 입력 값과 출력 행렬 A 는 source 에 지정된 클래스 형식입니다. bit 또는 ubit 정밀도(Precision)의 경우 출력은 입력을 포함할 수 있는 가장 작은 클래스를 갖습니다.예: '*ubit18' 다음과 동일합니다. 'ubit18=>uint32' |
|
|
다음 표에는 source
와 output
에 사용할 수 있는 값이 나와 있습니다.
값 유형 | 정밀도 | 비트(바이트) |
---|---|---|
정수, 부호 없음 |
|
|
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
정수, 부호 있음 |
|
|
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
부동소수점 숫자 |
|
|
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
문자 |
|
|
| MATLAB® |
대부분의 source
값의 경우, fread
가 전체 값을 읽기 전에 파일 끝에 도달하면 최종 값의 결과를 반환하지 않습니다. 그러나 source
가 bit
또는 n
ubit
인 경우 n
fread
는 최종 값에 대한 부분 결과를 반환합니다.
참고
MATLAB에 NaN
및 Inf
값을 유지하려면 double
형 또는 single
형 클래스의 데이터를 읽고 쓰십시오.
데이터형: char
| string
skip
— 건너뛸 바이트의 수
0 (디폴트 값) | 스칼라
각 값을 읽은 후에 건너뛸 바이트 수로, 스칼라로 지정됩니다. bit
또는 n
ubit
으로 n
precision
을 지정하는 경우 skip
을 비트 단위로 지정해야 합니다.
skip
인수를 사용하여 고정 크기 레코드의 비연속 필드에서 데이터를 읽을 수 있습니다.
machinefmt
— 바이트 읽기 순서
'n'
(디폴트 값) | 'b'
| 'l'
| 's'
| 'a'
| ...
파일에서 바이트를 읽는 순서로, 문자형 벡터나 string형 스칼라로 지정됩니다. machinefmt
를 다음 표에 있는 값 중 하나로 지정합니다. bit
및 n
ubit
정밀도의 경우, n
machinefmt
는 바이트 내 비트를 읽는 순서를 지정하지만 바이트를 읽는 순서는 시스템 바이트 순서에 따릅니다.
| 시스템 바이트 순서(디폴트 값) |
| 빅 엔디안 순서 |
| 리틀 엔디안 순서 |
| 빅 엔디안 순서, 64비트 long 데이터형 |
| 리틀 엔디안 순서, 64비트 long 데이터형 |
기본적으로, 현재 지원되는 플랫폼은 모두 새 파일에 리틀 엔디안 순서를 사용합니다. 기존의 이진 파일은 빅 엔디안 또는 리틀 엔디안 순서를 사용할 수 있습니다.
데이터형: char
| string
출력 인수
A
— 파일 데이터
열 벡터 | 행렬
파일 데이터로, 열 벡터로 반환됩니다. sizeA
인수를 지정하면 A
는 지정된 크기의 행렬이 됩니다. precision
인수에서 다른 클래스를 지정하지 않는 한 A
의 데이터는 double
형 클래스를 갖습니다.
count
— 읽은 문자의 수
스칼라
읽은 문자의 수로, 스칼라 값으로 반환됩니다.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
입력 인수
precision
은 상수여야 합니다.precision
이 지정하는source
클래스와output
클래스는'long'
,'ulong'
,'unsigned long'
,'bit
또는n
''ubit
값을 가질 수 없습니다.n
'machinefmt
입력값은 사용할 수 없습니다.precision
이 지정하는source
또는output
이 C 유형(예:int
)이면 해당 유형의 대상 크기와 프로덕션 크기는 다음과 같아야 합니다.일치해야 합니다.
MATLAB 유형에 직접 매핑되어야 합니다.
precision
이 지정하는source
유형은 타깃 하드웨어에서 C 유형에 직접 매핑되어야 합니다.fread
호출이 파일 전체를 읽는 경우, 코드 생성에 사용할 수 있는 가장 큰 배열에 모든 데이터가 들어갈 수 있어야 합니다.sizeA
가 상수가 아니거나 유한하지 않은 요소를 포함하고 있으면 동적 메모리 할당이 필요합니다.fread
함수의 코드 생성기에서는source
또는output
의char
값을 부호 있는8
비트 정수로 처리합니다.0
과127
사이의 값만 사용하십시오.생성된 코드는 파일 읽기 오류를 보고하지 않습니다. 따라서 MATLAB 코드에 파일 읽기 오류 처리 코드를 직접 작성해야 합니다. 오류 처리 코드에서는 읽은 바이트 수가 요청된 바이트 수와 일치하는지를 검사하는 것이 좋습니다. 예를 들면 다음과 같습니다.
... N = 100; [vals, numRead] = fread(fid, N, '*double'); if numRead ~= N % fewer elements read than expected end ...
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
이 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
버전 내역
R2006a 이전에 개발됨R2022b: 스레드 기반 환경에서 함수 사용
이 함수는 스레드 기반 환경을 지원합니다.
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)