Memory 在Julia中,如何在给定的内存位置重铸变量类型?
我正在使用FortranFiles.jl与由旧Fortran代码编写的文件进行交互。在给定文件的一部分,字符串数组被转换为Float64(或Float32,视情况而定)的单个数组,并存储为Fortran记录 我似乎在手册或在线上找不到关于如何做到这一点的文档 因此,为了阅读信息,我使用了如下方法:Memory 在Julia中,如何在给定的内存位置重铸变量类型?,memory,types,julia,Memory,Types,Julia,我正在使用FortranFiles.jl与由旧Fortran代码编写的文件进行交互。在给定文件的一部分,字符串数组被转换为Float64(或Float32,视情况而定)的单个数组,并存储为Fortran记录 我似乎在手册或在线上找不到关于如何做到这一点的文档 因此,为了阅读信息,我使用了如下方法: fid = FortranFile("myfile.dat") read(fid, (Float64, 10)) # which actually represents 5x 16-char str
fid = FortranFile("myfile.dat")
read(fid, (Float64, 10)) # which actually represents 5x 16-char strings
如何从一个浮点数组(由于使用FortranFiles.jl而给出的约束)和文件的存储方式,将内存重铸到Julia已知为字符的连续内存段
想象一下类似于将C中的(void*)
转换为(double*)
,等等
谢谢
编辑-修复了上面关于读取了多少16个字符长字符串的不准确评论。Krastanov
谢谢。使用重新解释基本上就是答案。然而,我发现了一些细微差别。(注意,这是为茱莉亚1.1.0准备的)
在处理不同大小的类型之间的重新解释时,即使对于一个元素,也需要将源放在数组中
例如,重新解释(UInt8,1.23)
不起作用。但是重新解释(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)]
克拉斯坦诺夫
谢谢。使用重新解释基本上就是答案。然而,我发现了一些细微差别。(注意,这是为茱莉亚1.1.0准备的)
在处理不同大小的类型之间的重新解释时,即使对于一个元素,也需要将源放在数组中
例如,重新解释(UInt8,1.23)
不起作用。但是重新解释(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)]
尝试从标准库中重新解释。尝试从标准库中重新解释。