Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 使用包含二进制文件数据的多个字段初始化Julia类型_Oop_Types_Binary Data_Julia - Fatal编程技术网

Oop 使用包含二进制文件数据的多个字段初始化Julia类型

Oop 使用包含二进制文件数据的多个字段初始化Julia类型,oop,types,binary-data,julia,Oop,Types,Binary Data,Julia,我有一个有很多字段的类型(想想几百个) Julia中的构造函数系统在我处理小类型时很好,但你可以想象,当我处理大对象时,它会变得多么笨拙: type Bar a:Int32 b:Int32 c:Int32 d:Int32 e:Float32 f:Uint8 g:Int64 h:ASCIIString # ... end bar = Bar(1, 2, 3, 4, 5, 1.1, 64, 2147483648, "Wall of text", [hundred

我有一个有很多字段的类型(想想几百个)

Julia中的构造函数系统在我处理小类型时很好,但你可以想象,当我处理大对象时,它会变得多么笨拙:

type Bar
  a:Int32
  b:Int32
  c:Int32
  d:Int32
  e:Float32
  f:Uint8
  g:Int64
  h:ASCIIString
  # ...
end

bar = Bar(1, 2, 3, 4, 5, 1.1, 64, 2147483648, "Wall of text", [hundreds more])
现在,我从一个二进制文件中读取数据。二进制文件遵循一个规范,使得第一个4字节值具有特定含义,第二个值具有另一种含义,等等

输入30分钟后,我创建了一个类型,其中所有字段都对应于二进制文件规范。字段的顺序与二进制文件中相应值的顺序相同

我真正希望的是不必键入300行代码来初始化对象:

bar2 = Bar(# here I describe what 'a' is
           read(f, Int32, 1)[0],
           # here I describe what 'b' is
           read(f, Int32, 1)[0],
           [...],
           # here I describe what 'j' is
           read(f, ASCIIString, 1)[0],
           [...],
           # this is getting long and tedious
           [...])

通过使用C语言进行设置,我可以
fread()
使用2-3行代码将二进制数据转换成一个结构。有没有一种方法可以让我在Julia中模仿这种轻松感?

此代码片段可能会有所帮助:

immutable TwoFloats
    f1::Float32
    f2::Float32
end
newtwofloats = reinterpret(TwoFloats, rand(Uint8, 8*2))
# Gives an array with two elements of type TwoFloats
dump(newtwofloats[1])  # Print them...
dump(newtwofloats[2])  # ... out

因此,您可以创建您的类型,并假设它的所有部分都很简单,那么它就可以工作了。然而,你怎么能在不提前知道它有多长的时间的情况下,阅读一本书呢?这在C语言中也不起作用。您只能以这种方式读取基本位类型。

但我似乎无法访问字段
t=Twofloat
->
t.f1
->
错误:type数据类型没有字段f1
您的意思是,例如
t=Twofloat(2.0,1.0)
t=TwoFloats
将类型
TwoFloats
粘贴到
t
中,而不是该类型的实例。我在代码示例中添加了一点,这可能会使它更清晰。听起来您的类型是这里的问题所在。为什么需要这么多字段?像矩阵或数据框架这样的东西更好用吗?我正在把一些东西从C翻译成Julia。我更希望数据结构在视觉上相似。也许有一种惯用的方法来构造它,但这是我正在处理的一个约束。