除了字符串连接函数(参见 连接字符串)将数值数据转换为相应的 UTF-8 编码字符外,还有几个将数值数据格式化为字符串的函数。mat2str 和 num2str 用于转换实数矩阵或复数矩阵,而 int2str 转换整数矩阵。int2str 取复数值的实部,并将小数值四舍五入为整数。将数值数据格式化为字符串更灵活的方法是使用 sprintf 函数(参见 格式化输出,sprintf)。
s = mat2str (x) ¶s = mat2str (x, n) ¶s = mat2str (x, [n1, n2]) ¶s = mat2str (…, "class") ¶将实数矩阵、复数矩阵和逻辑矩阵格式化为字符串。
返回的字符串可以通过 eval 函数用于重构原始矩阵。
值的精度由 n 指定。如果 n 是标量,则矩阵的实部和虚部以相同精度输出。否则,n(1) 定义实部的精度,n(2) 定义虚部的精度。n 的默认值为 15。
如果指定了参数 "class",则 x 的类别会包含在字符串中,使得 eval 将构造出相同类别的矩阵。
mat2str (pi)
⇒ "3.14159265358979"
mat2str (pi, 5)
⇒ "3.1416"
mat2str ([ -1/3 + i/7; 1/3 - i/7 ], [4 2])
⇒ "[-0.3333+0.14i;0.3333-0.14i]"
mat2str ([ -1/3 +i/7; 1/3 -i/7 ], [4 2])
⇒ "[-0.3333+0i 0+0.14i;0.3333+0i -0-0.14i]"
mat2str (int16 ([1 -1]), "class")
⇒ "int16([1 -1])"
mat2str (logical (eye (2)))
⇒ "[true false;false true]"
isequal (x, eval (mat2str (x)))
⇒ 1
str = num2str (x) ¶str = num2str (x, precision) ¶str = num2str (x, format) ¶将数字(或数组)转换为字符串(或字符数组)。
可选的第二个参数可以指定输出中使用的有效数字位数(precision),或者指定一个格式模板字符串(format),如 sprintf(参见 格式化输出)。num2str 也可以处理复数。
示例:
num2str (123.456)
⇒ 123.456
num2str (123.456, 4)
⇒ 123.5
s = num2str ([1, 1.34; 3, 3.56], "%5.1f")
⇒ s =
1.0 1.3
3.0 3.6
whos s
⇒ Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
s 2x8 16 char
Total is 16 elements using 16 bytes
num2str (1.234 + 27.3i)
⇒ 1.234+27.3i
num2str 函数不够灵活。为了更好地控制结果,请使用 sprintf(参见 格式化输出)。
编程说明:
为了与 MATLAB 兼容,返回字符串前会去除前导空格。
大于 flintmax 的整数可能无法正确显示。
对于复数 x,格式字符串只能包含一个输出转换说明符,不能有其他内容。否则,结果将不可预测。
程序员指定的任何可选 format 都将原样使用。这与 MATLAB 不同,后者会基于内部启发式方法修改 format。
str = int2str (n) ¶将整数(或整数数组)转换为字符串(或字符数组)。
int2str (123)
⇒ 123
s = int2str ([1, 2, 3; 4, 5, 6])
⇒ s =
1 2 3
4 5 6
whos s
⇒ Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
s 2x7 14 char
Total is 14 elements using 14 bytes
该函数不够灵活。为了更好地控制结果,请使用 sprintf(参见 格式化输出)。
编程说明:
非整数在显示前会四舍五入为整数。只显示复数的实部。
d = str2double (str) ¶将字符串转换为实数或复数。
字符串必须是以下格式之一,其中 a 和 b 是实数,复数单位是 'i' 或 'j':
如果存在,a 和/或 b 的格式为 [+-]d[,.]d[[eE][+-]d],其中方括号表示可选参数,'d' 表示零个或多个数字。特殊输入值 Inf、NaN 和 NA 也被接受。
str 可以是字符串、字符矩阵或元胞数组。对于字符数组,转换对每一行重复进行,并返回双精度或复数数组。s 中的空行会被删除,不会出现在数值数组中。对于元胞数组,每个字符串元素都会被处理,并返回与 str 相同维度的双精度或复数数组。
对于不可转换的标量或字符串输入,str2double 返回 NaN。类似地,对于字符数组输入,str2double 为 s 中任何无法转换的行返回 NaN。对于元胞数组,str2double 为 s 中转换失败的任何元素返回 NaN。请注意,混合字符串/数值元胞数组中的数值元素不是字符串,这些元素的转换将失败并返回 NaN。
编程说明:str2double 可以替代 str2num,效率更高,并且避免了在未知数据上使用 eval 的安全风险。
参见: str2num.
x = str2num (s) ¶[x, state] = str2num (s) ¶将字符串(或字符数组)s 转换为数字(或数组)。
示例:
str2num ("3.141596")
⇒ 3.141596
str2num (["1, 2, 3"; "4, 5, 6"])
⇒ 1 2 3
4 5 6
可选的第二个输出参数 state 在转换成功时为逻辑真(true)。如果转换失败,数值输出 x 为空,state 为假(false)。
注意: 由于 str2num 使用 eval 函数进行转换,str2num 将执行字符串 s 中包含的任何代码。请使用 str2double 以获得更安全、更快的转换。
对于字符串元胞数组,请使用 str2double。
参见: str2double, eval.
d = bin2dec (str) ¶返回与字符串 str 所表示的二进制数对应的十进制数。
例如:
bin2dec ("1110")
⇒ 14
转换过程中会忽略空格,空格可用于使二进制数更具可读性。
bin2dec ("1000 0001")
⇒ 129
如果 str 是字符串矩阵,则返回列向量,str 的每一行对应一个转换后的数字;无效行评估为 NaN。
如果 str 是字符串元胞数组,则返回列向量,str 中的每个元胞元素对应一个转换后的数字。
bstr = dec2bin (d) ¶bstr = dec2bin (d, len) ¶返回一个由 1 和 0 组成的字符串,表示将整数 d 转换为二进制数的结果。
如果 d 是矩阵或元胞数组,则返回一个字符串矩阵,d 中的每个元素对应一行,并用前导零填充到最大值的宽度。
可选的第二个参数 len 指定结果的最小位数。
对于 d 的负数元素,返回其补码的二进制值。结果会根据输入的幅度,用前导 1 填充到 8、16、32 或 64 位。正数输入元素则用前导零填充到相同宽度。
示例:
dec2bin (14)
⇒ "1110"
dec2bin (-14)
⇒ "11110010"
编程提示:dec2bin 会丢弃输入的小数部分。如果需要同时转换小数部分,请使用非零小数位数的 dec2base。你也可以对小数输入使用 fix 或 round 来确保可预测的舍入行为。
hstr = dec2hex (d) ¶hstr = dec2hex (d, len) ¶返回一个字符串,表示将整数 d 转换为十六进制(基数为 16)数的结果。
如果 d 为负数,则返回 d 的十六进制补码。
如果 d 是矩阵或元胞数组,则返回一个字符串矩阵,d 中的每个元素对应一行,并用前导零填充到最大值的宽度。
可选的第二个参数 len 指定结果的最小位数。
示例:
dec2hex (2748)
⇒ "ABC"
dec2hex (-2)
⇒ "FE"
编程提示:dec2hex 会丢弃输入的小数部分。如果需要同时转换小数部分,请使用非零小数位数的 dec2base。你也可以对小数输入使用 fix 或 round 来确保可预测的舍入行为。
d = hex2dec (str) ¶返回与字符串 str 所表示的十六进制数对应的整数。
例如:
hex2dec ("12B")
⇒ 299
hex2dec ("12b")
⇒ 299
如果 str 是字符串矩阵,则返回列向量,str 的每一行对应一个转换后的数字;无效行评估为 NaN。
如果 str 是字符串元胞数组,则返回列向量,str 中的每个元胞元素对应一个转换后的数字。
str = dec2base (d, base) ¶str = dec2base (d, base, len) ¶str = dec2base (d, base, len, decimals) ¶返回一个以基数为 base 的符号字符串,对应于值 d。
dec2base (123, 3) ⇒ "11120"
如果 d 为负数,则结果将以补码表示法表示 d。例如,负二进制数用二补码表示,其他基数依此类推。
如果 d 是矩阵或元胞数组,则返回一个字符串矩阵,d 中的每个元素对应一行,并用前导零填充到最大值的宽度。
如果 base 是字符串,则 base 的字符被用作 d 的数字符号。空白字符(空格、制表符、换行符等)不能用作符号。
dec2base (123, "aei") ⇒ "eeeia"
可选的第三个参数 len 指定结果整数部分的最小位数。如果省略此参数,则 dec2base 使用足够多的位数来容纳输入。
可选的第四个参数 decimals 指定表示输入小数部分的位数。如果省略此参数,则设为零,并且 dec2base 为了向后兼容返回整数输出。
dec2base (100*pi, 16) ⇒ "13A" dec2base (100*pi, 16, 4) ⇒ "013A" dec2base (100*pi, 16, 4, 6) ⇒ "013A.28C59D" dec2base (-100*pi, 16) ⇒ "EC6" dec2base (-100*pi, 16, 4) ⇒ "FEC6" dec2base (-100*pi, 16, 4, 6) ⇒ "FEC5.D73A63"
编程提示:将负数输入传递给 dec2base 时,最好明确指定所需输出的长度。
d = base2dec (str, base) ¶将 str 从基数为 base 的数字字符串转换为十进制整数(基数为 10)。
base2dec ("11120", 3)
⇒ 123
如果 str 是字符串矩阵,则返回列向量,str 的每一行对应一个值。如果某行包含无效符号,则对应值将为 NaN。
如果 str 是字符串元胞数组,则返回与 str 维度相同的数值数组。
如果 base 是字符串,则 base 的字符被用作 str 的数字符号。' '(空格)可能被用作为数字符号,但 str 中的数字之间必须用空格分隔,以避免数字符号被误认为是分隔符。
[a, b, …] = strread (str) ¶[a, b, …] = strread (str, format) ¶[a, b, …] = strread (str, format, format_repeat) ¶[a, b, …] = strread (str, format, format_repeat, option_name, value, …) ¶[a, b, …] = strread (str, format, option_name, value, …) ¶将字符串 str 中的数据按 format 读取并返回到 a、b 等变量中。当匹配到多个值时,a、b 等变量必须具有相同的大小。
在 format 字符串中,支持类似于 fscanf 的格式说明符。有关更多信息,请参见 格式化输入。如果没有指定 format,则使用所有转换说明符的组合,默认值为 "%f"。这意味着默认情况下读取数字。但是,这也意味着如果没有找到数值,strread 可能会返回空值。
格式字符串中的空格(空格、制表符等)会导致输入中匹配零个或多个空白字符。在格式字符串中,连续的空格字符等同于一个空格。
在格式字符串中,存在一个忽略标志("*")以避免输出中对应结果。任何非格式字符(如文本)都会被原样读入。
如果 format 为空(即 "" 或 ' '),并且 str 是一个字符数组或字符串,则 str 被分割为单独的输出参数,其中参数类型由 str 本身确定。
格式重复次数控制读取数据块的重复次数。它可以是整数或 Inf(默认值)。
strread 支持的选项名称/值对参数:
"commentstyle"支持 value 的部分规范(行尾注释匹配到最近的换行符,而不是行尾):
"shell"
从 # 字符到最近的换行符之间的所有内容被跳过。
"c"
/* 和 */ 之间的所有内容被跳过。
"c++"
从 // 字符到最近的换行符之间的所有内容被跳过。
"matlab"
从 % 字符到最近的换行符之间的所有内容被跳过。
"delimiter"value 中的任何字符都将用于将 str 分割成单词(默认值 = 任何空白字符)。注意,除非提供了 "%s" 格式转换说明符,否则空白字符会隐式添加到分隔符集合中;请参见下面的 "whitespace" 参数。分隔符集合不能为空;如果需要,Octave 会用空格作为替代分隔符。
"emptyvalue"在非空白字符分隔的数据中,为空数值返回的值。默认值为 NaN。当数据类型不支持 NaN(例如 int32)时,默认值为零。
"multipledelimsasone"将连续多个分隔符(中间没有空白)视为一个分隔符。连续的分隔符序列不需要垂直 "aligned"。
"treatasempty"将 value 中的字符串的单个出现(被分隔符或空白包围)视为缺失值。
"returnonerror"如果 value 为真(1,默认值),忽略读取错误并正常返回。如果为假(0),则返回错误。
"whitespace"value 中的任何字符都将被解释为空白并进行修剪;定义空白的字符串必须用双引号括起来,以便正确处理像 "\t" 这样的特殊字符。在每个数据字段中,多个连续的空白字符会被合并为一个空格,并且前导和尾随的空白会被删除。空白的默认值为
"
\b\r\n\t"
(注意空格)。除非至少提供了一个 "%s" 格式转换说明符,否则空白字符总是被添加到分隔符集合中;在这种情况下,只有显式指定在 "delimiter" 中的空白才会作为分隔符保留,并从空白字符集合中移除。如果要保持空白字符原样(例如在字符串中),请为 "whitespace" 指定空值(即 "");显然,此时空白不能作为分隔符。
当 str 中的单词数量与格式转换说明符的数量不精确匹配时,strread 的行为取决于 str 的最后一个字符:
"\n"数据列用空字段或 NaN 填充,使所有列长度相等
"\n"数据列不填充;strread 返回长度不等的列
版权所有 © 2024-2026 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2