标准的内置数据类型是实数和复数的标量和矩阵、范围、字符串、数据结构类型和元胞数组。在未来的版本中可能会添加其他内置数据类型。如果您需要一个当前未作为内置类型提供的专用数据类型,我们鼓励您编写自己的用户定义数据类型,并将其贡献给Octave的未来版本。
变量的数据类型可以通过使用以下函数来确定和更改。
classname = class (obj) ¶cls = class (s, classname) ¶cls = class (s, classname, parent1, …) ¶返回对象obj的类名,或使用结构体中的字段创建一个类为s且名称(字符串)为classname的类.
附加参数命名了派生新类的父类列表。
tf = isa (obj, classname) ¶如果返回true,那么obj是classname类中的对象.
classname也可以是以下类别之一:
"float"包含浮点值类型"double"和"single".
"integer"整数值,包括类型(u)int8、(u)int 16、(u)int 32和(u)int64。
"numeric"包含浮点值或整数值的数值。
如果classname是字符串的元胞数组,返回相同大小的逻辑数组,其中包含每个obj是否属于这个类。
y = cast (x, "type") ¶y = cast (x, "like", var) ¶转换x到数据类型type.
输入x可以是可转换为目标类的类的标量、向量或矩阵(见下文)。
如果变量var在之后指定"like", x被转换为相同的数据类型和稀疏性属性。如果var是复数,x也会是复数。
var可能是和type可以命名以下任何一个内置的枚举类:
"double" "single" "logical" "char" "int8" "int16" "int32" "int64" "uint8" "uint16" "uint32" "uint64"
值x可以被修改以适应新类型的范围。
示例:
cast (-5, "uint8") ⇒ 0 cast (300, "int8") ⇒ 127
编程注意事项:此函数依赖于对象x中的名为type的转换方法.用户定义的类可以仅实现上面所示的完整类型列表的子集。在这种情况下,为了达到所需的类型,可能需要调用两次强制转换。例如,几乎总是实现到double的转换,但可能不会实现到uint8的转换。在这种情况下,以下代码将起作用:
cast (cast (user_defined_val, "double"), "uint8")
详见: typecast, int8, uint8, int16, uint16, int32, uint32, int64, uint64, double, single, logical, char, class, typeinfo.
y = typecast (x, "class") ¶返回新数组y因为解释class的数据而返回x在内存中作为数字类的数据.
两者都属于x和class必须是已构建的数字类之一:
"logical" "char" "int8" "int16" "int32" "int64" "uint8" "uint16" "uint32" "uint64" "double" "single" "double complex" "single complex"
最后两个仅与class一起使用; 它们指示指定复数结果。复数数组作为连续的实数对存储在存储器中。整数类型的大小从其位计数给定。逻辑和字符通常都是一个字节宽;然而,C++并不能保证这一点。如果您的系统符合 IEEE 754,则单字节和双字节的宽度分别为4字节和8字节。"logical"不允许用于class.
如果输入是行向量,则返回值是行向量;否则返回值是列向量。
如果x的位长度不能被class的位长度整除,则报错。
在小端机器上使用类型转换的一个例子是
x = uint16 ([1, 65535]); typecast (x, "uint8") ⇒ [ 1, 0, 255, 255]
y = swapbytes (x) ¶交换值的字节顺序,从小端到大端转换,反之亦然。
例如
swapbytes (uint16 (1:4)) ⇒ 256 512 768 1024
y = bitpack (x, class) ¶返回新数组y从解释逻辑数组class返回x作为数字类数据的原始位模式.
class必须是内置的数字类之一:
"double" "single" "double complex" "single complex" "char" "int8" "int16" "int32" "int64" "uint8" "uint16" "uint32" "uint64"
x的元素数量应该可以被class的位长度整除。如果不能,则丢弃多余的位。位按递增顺序出现,即,x(1)是位0,x(2)是位1,以此类推。
结果是行向量,如果x是行向量,否则是列向量。
y = bitunpack (x) ¶返回逻辑数组y对应于x的原始位模式.
x必须属于内置数字类之一:
"double" "single" "char" "int8" "int16" "int32" "int64" "uint8" "uint16" "uint32" "uint64"
结果是行向量,如果x是一个行向量;否则,它就是列向量。
版权所有 © 2024-2026 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2