Octave 可以使用 fread 和 fwrite 函数读取和写入二进制数据,这两个函数以标准 C 语言中同名的函数为模板。它们能够在读取数据时自动交换整数数据的字节序,并在支持的浮点格式之间进行转换。
val = fread (fid) ¶val = fread (fid, size) ¶val = fread (fid, size, precision) ¶val = fread (fid, size, precision, skip) ¶val = fread (fid, size, precision, skip, arch) ¶[val, count] = fread (…) ¶从文件描述符 fid 指定的文件中读取二进制数据。
可选参数 size 指定要读取的数据量,可以是以下值之一:
Inf尽可能多地读取,返回一个列向量。
nr读取至多 nr 个元素,返回一个列向量。
[nr, Inf]尽可能多地读取,返回一个包含 nr 行的矩阵。若读取的元素数量不是 nr 的整数倍,则最后一列用零填充。
[nr, nc]读取至多 nr * nc 个元素,返回一个包含 nr 行的矩阵。若读取的元素数量不是 nr 的整数倍,则最后一列用零填充。
若省略 size,则默认使用 Inf。
可选参数 precision 是一个字符串,指定要读取的数据类型,可以是以下值之一:
"uint8"(默认)8 位无符号整数。
"int8""integer*1"8 位有符号整数。
"uint16""ushort""unsigned short"16 位无符号整数。
"int16""integer*2""short"16 位有符号整数。
"uint""uint32""unsigned int""ulong""unsigned long"32 位无符号整数。
"int""int32""integer*4""long"32 位有符号整数。
"uint64"64 位无符号整数。
"int64""integer*8"64 位有符号整数。
"single""float""float32""real*4"32 位浮点数。
"double""float64""real*8"64 位浮点数。
"char""char*1"8 位单字符。
"uchar""unsigned char"8 位无符号字符。
"schar""signed char"8 位有符号字符。
默认精度为 "uint8"。
precision 参数还可以指定可选的重复计数。例如,32*single 使 fread 读取一个包含 32 个单精度浮点数的数据块。分块读取与 skip 参数配合使用非常有用。
precision 参数还可以指定类型转换。例如,int16=>int32 使 fread 读取 16 位整数值并返回 32 位整数值的数组。默认情况下,fread 返回一个双精度数组。特殊形式 *TYPE 是 TYPE=>TYPE 的简写。
转换和重复计数可以组合使用。例如,规格 32*single=>single 使 fread 读取单精度浮点值的数据块,并返回一个单精度值数组,而非默认的双精度值数组。
可选参数 skip 指定读取每个元素(或数据块)后要跳过的字节数。若未指定,则假定值为 0。若最后一个数据块读取不完整,则跳过操作被省略。例如:
fread (f, 10, "3*single=>single", 8)
将省略最后的 8 字节跳过,因为最后一次读取不是一个完整的 3 个值的数据块。
可选参数 arch 是一个字符串,指定文件的数据格式。有效值为:
"native" 或 "n"当前计算机的格式。
"ieee-be" 或 "b"IEEE 大端序。
"ieee-le" 或 "l"IEEE 小端序。
若未指定 arch,则使用创建该文件描述符时调用 fopen 所使用的值。否则,fread 中指定的值会覆盖 fopen 中的值,并决定数据格式。
输出参数 val 包含从文件读取的数据。
可选的返回值 count 包含读取的元素个数。
count = fwrite (fid, data) ¶count = fwrite (fid, data, precision) ¶count = fwrite (fid, data, precision, skip) ¶count = fwrite (fid, data, precision, skip, arch) ¶将数据以二进制形式写入文件描述符 fid 指定的文件。
参数 data 是一个待写入文件的值的矩阵。这些值按列主序进行提取。
其余参数 precision、skip 和 arch 是可选的,其解释方式与 fread 相同。
输出 count 是成功写入的数据项个数。
编程注意事项:如果 data 中的值超出指定精度所能表示的范围,则 fwrite 的行为是未定义的。
版权所有 © 2024-2026 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2