TypeCast和Typecastx是MEX函数,用于模拟MATLAB内部类型的函数与扩展。这些C-MEX版本的键盘与以下重要方面中的内在类型值不同:
内在的typecast
------------------
复制类型:深度数据副本
允许复杂:没有
允许逻辑:没有
允许char:否
允许非载体:没有
c-mex typeCast
---------------
复制类型:共享数据副本
允许复杂:是的
允许逻辑:是(无法从复杂转换)
允许char:是(无法从复杂转换)
允许非向量:是的
由于这些C-MEX函数产生原始的共享数据副本,因此它比MATLAB内在类型重叠更效率,如果您使用大变量可能很重要。对于非向量输入,第一个非单例维度必须兼容转换。
C-MEX TEICAST和TYPECASTX功能之间的功能差异有* NO *差异。包括TypeCastx的目的是使用户可以在不阴影内部类型的情况下具有上面显示的扩展功能。例如,具有没有MATLAB的MATLAB的旧版本的用户可以安装TYPECAST和TYPECASTX,而具有较高版本的MATLAB的用户* DO *具有内在类型,则可能会选择仅安装TYPECASTX函数。
请注意,这些C-MEX功能是自建筑物......您无需了解任何关于C.
詹姆斯图马(2021年)。TENCAST和TYPECASTX C-MEX功能(//www.tatmou.com/matlabcentral/fileexchange/17476-typecast-unctpecastx-c-mex-functions),Matlab中央文件交换。检索到。
我有一个问题使用此功能与Matlab R2018和R2019。MEX文件的编译似乎很好,但是在运行生成的MEX文件时,MATLAB崩溃。我尝试了Mingw和Microsoft编译器。
对我不起作用(或者我做错了什么):
使用Matlab的Teyecast:
comp_vector = uint8([126,9,126,9]);
>> typecast(Comp_vector,'单')
ans =.
单身的
3.0579E-33.
使用typecastx:
>> typecast(Comp_vector,'单')
Matlab崩溃了!!
TypeCastx Over typeCast的一个优点是它可以处理矩阵。
谢谢詹姆斯,并谢谢你也指出了R2014B后的功能 - 这节省了我花时间来设置一些测试,看看我使用2018A的差异。
请注意,由于R2014B,Matlab TypeCast确实共享数据副本,因此TypeCastX变得很大程度上(逻辑和识别功能除外)。
非常好!对于那些尝试在Mac 10.8或最近的Ubuntu版本构建此问题的人,请尝试以下操作:
在Mac OS 10.8上:
从http://stackoverflow.com/questions/12643236/matlab-2012a-mex-to-work-with-xcode-4-5-on-mountain-lion.
运行mex -setup并选择mexopts.sh(给我1)
编辑〜/ .matlab / r2012b / mexopts.sh
将CC从GCC更改为LLVM-GCC
将g ++更改为llvm-g ++的cxx
将sdkroot设置为'/'
在Ubuntu上:
从
//www.tatmou.com/matlabcentral/answers/47064-running-mex-files-compiled-on-linux.
http://stackoverflow.com/a/5963813.
运行seteNv('ld_library_path','/ usr / local / lib:/ usr / lib:/ usr / local / lib64:/ usr / lib64')
在运行typecastx之前
是的。感谢您指出了这一点。我认为这个问题是旧版本上的“char *名称”,它是旧版本的“char名[64]”。我将投入代码来自动检测此并重新发布。
在MATLAB 6.5中使用此函数导致奇怪的行为:MX-> ClassID必须设置为[outClass + 1],除了双倍,其中需要2作为ClassID,而MXDOUPE_CLASS为6。
没有启用临时和数字标志,将导致哪些缺点?
特别是来自char的转换非常有用。