我正在使用FortranFiles.jl与旧的Fortran代码编写的文件进行交互。在给定文件的一部分,字符串数组被转换为Float64(或Float32,取决于)的单个数组,并存储为Fortran记录。
我似乎找不到手册或在线上的文档。
因此,要阅读信息,我使用的是类似的东西:
fid = FortranFile("myfile.dat")
read(fid, (Float64, 10)) # which actually represents 20x 16-char strings
如何将Floats数组(由于使用FortranFiles.jl和文件存储方式而产生的约束)中的内存重铸到连续的内存区(朱莉娅称为字符)?
想像类似于将C中的(void *)
变成(double *)
等的情况……
谢谢。
答案 0 :(得分:0)
克拉斯坦诺夫,
谢谢。使用reinterpret
本质上就是答案。但是,我发现了一些细微差别。 (注:这是针对Julia 1.1.0的)
在处理不同大小的类型之间的重新解释时,您甚至需要将源放置在一个元素数组中。
例如reinterpret(UInt8, 1.23)
无效。但是reinterpret(UInt8, [1.23])
将起作用。对于我的示例来说,这不是问题,因为read
返回一个数组,但是当我在REPL上玩耍时发现了一些东西。
另外,Char
类型是Unicode类型,被视为32位数据类型,因此我在上面使用UInt8
。
最终答案如下:
fid = FortranFile("myfile.dat")
tmp = read(fid, (Float64, 10)) # This return an array
chars = [Char(i) for i in reinterpret(UInt8, tmp)]