Memory 在Julia中,如何在给定的内存位置重铸变量类型?

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

我正在使用FortranFiles.jl与由旧Fortran代码编写的文件进行交互。在给定文件的一部分,字符串数组被转换为Float64(或Float32,视情况而定)的单个数组,并存储为Fortran记录

我似乎在手册或在线上找不到关于如何做到这一点的文档

因此,为了阅读信息,我使用了如下方法:

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)]

尝试从标准库中重新解释
。尝试从标准库中重新解释