14.2.16 二进制 I/O

Octave 可以使用 freadfwrite 函数读取和写入二进制数据,这两个函数以标准 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 返回一个双精度数组。特殊形式 *TYPETYPE=>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 包含读取的元素个数。

另请参阅: fwritefgetsfgetlfscanffopen

 
count = fwrite (fid, data)
count = fwrite (fid, data, precision)
count = fwrite (fid, data, precision, skip)
count = fwrite (fid, data, precision, skip, arch)

将数据以二进制形式写入文件描述符 fid 指定的文件。

参数 data 是一个待写入文件的值的矩阵。这些值按列主序进行提取。

其余参数 precisionskiparch 是可选的,其解释方式与 fread 相同。

输出 count 是成功写入的数据项个数。

编程注意事项:如果 data 中的值超出指定精度所能表示的范围,则 fwrite 的行为是未定义的。

另请参阅: freadfputsfprintffopen


版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2