5.4.2数值数据和字符串

除了字符串连接函数(详见连接字符串)它将数字数据转换为相应的UTF-8编码字符,还有几个将数字数据格式化为字符串的函数。mat2strnum2str转换实数矩阵或复数矩阵,而int2str转换整数矩阵。int2str取复数值的实数部分,并将分数值舍入为整数。将数字数据格式化为字符串的一种更灵活的方法是sprintf函数(详见格式化输出, sprintf).

 
: s = mat2str (x, n)
: s = mat2str (x, n, "class")

将实数矩阵、复数矩阵和逻辑矩阵格式化为字符串。

返回的字符串可用于通过使用eval作用

值的精度从下式给出n如果n是一个标量,矩阵的实部和虚部都打印到相同的精度。否则n(1)定义realpart的精度,以及n(2)定义了虚部的精度。的默认值n是15。

如果参数"class"则给出的类x以这样的方式包含在字符串中eval将导致构造同一类的矩阵。

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

详见: sprintf, num2str, int2str.

广告
 
: 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基于内部启发法。

详见: sprintf, int2str, mat2str.

广告
 
: 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详见格式化输出).

编程说明:

非整数在显示前四舍五入为整数。只显示复数的实数部分。

详见: sprintf, num2str, mat2str.

广告
 
: d = str2double (str)

将字符串转换为实数或复数。

字符串必须采用以下格式之一,其中a和b为实数,复数单位为'i''j':

如果存在,a和/或b的形式为[+-]d[,.]d[[eE][+-]d],其中括号表示可选参数和'd'表示零或多个数字。特殊输入值Inf, NaNNA也被接受。

str可以是字符串、字符矩阵或元胞数组。对于字符数组,对每一行重复转换,并返回一个双或复数数组。中的空行s被删除,并且不会在数字数组中返回。对于元胞数组,处理每个字符串,并生成与str返回。

对于无法转换的标量或字符串输入str2doublereturnsa NaN。同样,对于字符数组输入str2double为的任何行返回aNaNs无法转换。对于元胞数组,str2double为的任何元素返回NaNs转换失败。请注意,混合字符串/数字元胞数组中的数字元素不是字符串,这些元素的转换将失败,并返回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,当转换成功时在逻辑上是正确的。如果转换使数字输出失败,x,为空,并且state是错误的。

小心str2num使用eval函数来进行转换,str2num将执行字符串中包含的任何代码s使用str2double以实现更安全、更快的转换。

对于字符串的元胞数组,使用str2double.

详见: str2double, eval.

广告
 
: d = bin2dec (str)

返回字符串表示的二进制数对应的十进制数str.

例如

bin2dec ("1110")
     ⇒ 14

空格在转换过程中被忽略,可以用来提高二进制数的可读性。

bin2dec ("1000 0001")
     ⇒ 129

如果str是一个字符串矩阵,返回一个列向量,每行包含一个转换后的数字str; 无效行的计算结果为NaN。

如果str是字符串的元胞数组,返回一个列向量,其中每个数组元素有一个转换后的数字str.

详见: dec2bin, base2dec, hex2dec.

广告
 
: 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小数位数为非零。您也可以使用fixround以确保可预测的舍入行为。

详见: bin2dec, dec2base, dec2hex.

广告
 
: hstr = dec2hex (d)
: hstr = dec2hex (d, len)

返回表示整数转换的字符串d到十六进制(以16为基数)。

如果d为负,返回的十六进制补码d.

如果d是矩阵或元胞数组,返回中每个元素一行的字符串矩阵d,用前导零填充到最大值的宽度。

可选的第二个自变量,len,指定结果中的最小位数。

示例:

dec2hex (2748)
     ⇒ "ABC"

dec2hex (-2)
     ⇒ "FE"

编程提示:dec2hex丢弃输入的任何小数部分。如果您也需要转换小数部分,请调用dec2base小数位数为非零。您也可以使用fixround以确保可预测的舍入行为。

详见: hex2dec, dec2base, dec2bin.

广告
 
: d = hex2dec (str)

返回从字符串表示的十六进制数对应的整数str.

例如

hex2dec ("12B")
      ⇒ 299
hex2dec ("12b")
      ⇒ 299

如果str是一个字符串矩阵,返回一个列向量,每行包含一个转换后的数字str; 无效行的计算结果为NaN。

如果str是字符串的元胞数组,返回一个列向量,其中每个数组元素有一个转换后的数字str.

详见: dec2hex, base2dec, bin2dec.

广告
 
: 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,最好显式指定所需输出的长度。

详见: base2dec, dec2bin, dec2hex.

广告
 
: d = base2dec (str, base)

转换str从基数中的一串数字base到小数位数(以10为基数)。

base2dec ("11120", 3)
   ⇒ 123

如果str是一个字符串矩阵,返回一个列向量,每行一个值为str。如果一行包含无效符号,则相应的值将为NaN。

如果str是字符串的元胞数组,返回中每个数组元素一个值的列向量str.

如果base是一个字符串,的字符base用作的数字符号str.Space(“”)不能用作asymbol。

base2dec ("yyyzx", "xyz")
   ⇒ 123

详见: dec2base, bin2dec, hex2dec.

广告
 
: s = num2hex (n)
: s = num2hex (n, "cell")

将数字数组转换为十六进制字符串数组。

例如

num2hex ([-1, 1, e, Inf])
⇒ "bff0000000000000
    3ff0000000000000
    4005bf0a8b145769
    7ff0000000000000"

如果参数n是单精度数字或向量,返回的字符串长度为8。例如

num2hex (single ([-1, 1, e, Inf]))
⇒ "bf800000
    3f800000
    402df854
    7f800000"

带有可选的第二个参数"cell",返回字符串的元胞数组,而不是字符数组。

详见: hex2num, hex2dec, dec2hex.

广告
 
: n = hex2num (s)
: n = hex2num (s, class)

将十六进制字符数组或字符串元胞数组类型转换为数字数组。

默认情况下,输入数组被解释为表示双精度值的十六进制数字。如果给定的字符少于16个,则字符串用右填充'0'字符。

给定字符串矩阵,hex2num将每一行视为一个单独的数字。

hex2num (["4005bf0a8b145769"; "4024000000000000"])
   ⇒ [2.7183; 10.000]

可选的第二个参数class可以用于使inputarray被解释为不同的值类型。可能的值为

参数 字符
"int8" 2
"uint8" 2
"int16" 4
"uint16" 4
"int32" 8
"uint32" 8
"int64" 16
"uint64" 16
"char" 2
"single" 8
"double" 16

例如

hex2num (["402df854"; "41200000"], "single")
   ⇒ [2.7183; 10.000]

详见: num2hex, hex2dec, dec2hex.

广告
 
: [a, …] = strread (str)
: [a, …] = strread (str, format)
: [a, …] = strread (str, format, format_repeat)
: [a, …] = strread (str, format, prop1, value1, …)
: [a, …] = strread (str, format, format_repeat, prop1, value1, …)

此函数已过时。使用textscan相反

从字符串中读取数据。

字符串str被拆分为与中的指定符重复匹配的单词format第一个单词与第一个值匹配,第二个单词与第二个值匹配等等。如果单词多于值,则重复该过程,直到处理完所有单词为止。

字符串format描述中的单词str应该进行解析。它可以包含以下值的任意组合:

%s

该单词被解析为字符串。

广告
%f
%n

该单词被解析为数字并转换为双精度。

广告
%d
%u

该单词被解析为数字并转换为int32。

广告
%*
%*f
%*s

该单词被跳过。

对于%s和%d、%f、%n、%u以及相关的%*s…值,可选宽度可以指定为%Ns等,其中n是大于1的整数。对于%f,允许使用格式值,如%n.Mf。

广告
literals

此外,该格式可能包含文字字符串;这些将在阅读过程中跳过。

广告

对应于第一个值的解析词在第一个输出参数中返回,对于其余的值也是如此。

默认情况下,format"%f",意味着从中读取数字str。如果str仅包含数字字段。

例如,字符串

str = "\
Bunny Bugs   5.5\n\
Duck Daffy  -7.5e-5\n\
Penguin Tux   6"

可以使用读取

[a, b, c] = strread (str, "%s %s %f");

可选数字参数format_repeat可用于限制读取的项目数量:

-1

(默认值)读取所有字符串直到结束。

广告
N

读取N次nargout项目。0(零)是的可接受值format_repeat.

广告

的行为strread可以通过属性值对进行更改。可识别以下属性:

"commentstyle"

的部分str被视为注释,将被跳过。value是注释样式,可以是以下任意一种。

  • "shell"一切从#跳过最接近行尾的字符。
  • "c"之间的一切/**/被跳过。
  • "c++"一切从//跳过最接近行尾的字符。
  • "matlab"一切从%跳过最接近行尾的字符。
  • 用户提供的。两个参数:(1)一个字符串,或1x1元胞字符串:跳过它右边的所有内容;(2) 2x1元胞字符串数组:跳过左右字符串之间的所有内容。
广告
"delimiter"

中的任何字符value将用于拆分str转换为单词(默认值=任何空白)。请注意,除非"%s"提供了格式转换指定器;详见"whitespace"下面的参数。分隔符字符集不能为空;如果需要,Octave替换aspace作为分隔符。

广告
"emptyvalue"

对于非空格分隔的数据中的空数值,要返回的值。默认值为NaN。当数据类型不支持NaN(例如int32)时,默认值为零。

广告
"multipledelimsasone"

将一系列连续的分隔符(中间没有空格)视为单个分隔符。连续分隔符序列不需要垂直排列"aligned".

广告
"treatasempty"

处理中出现的单个字符串(用分隔符或空格包围)value作为缺省值。

广告
"returnonerror"

如果valuetrue(1,默认值),忽略读取错误并正常返回。如果为false(0),则报告错误。

广告
"whitespace"

中的任何字符value将被解释为空白并进行修剪;定义空白的字符串必须用双引号括起来,以便正确处理特殊字符,如"\t".在每个数据字段中,多个连续的空白字符被折叠到一个空格中,并删除前导和尾随空白。空白的默认值为" \b\r\n\t"(注意空格)。除非至少有一个空格,否则空格总是添加到分隔符集"%s"格式转换值已发布;在这种情况下,只有在中明确指定的空白"delimiter"保留为分隔符,并从空白字符集中删除。如果空白字符要保持原样(例如字符串),则指定一个空值(即。,对于"whitespace"; 显然,空白不能作为分隔符。

广告

当中的字数str与格式转换值数量的精确倍数不匹配,strread的行为取决于的最后一个字符str:

last character = "\n"

数据列填充有空字段或NaN,以便所有列的长度相等

广告
last character is not "\n"

数据列未填充;strread返回长度不等的列

广告

详见: textscan, sscanf.

广告

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

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