我在Ruby中编写了一个简单的霍夫曼编码.作为输出,我有一个数组,例如:
["010", "1111", "10", "10", "110", "1110", "001", "110", "000", "10", "011"]
Run Code Online (Sandbox Code Playgroud)
我需要在文件中写入,然后读取它.我尝试了几种方法:
IO.binwrite("out.cake", array)
Run Code Online (Sandbox Code Playgroud)
我得到一个简单的文本文件,而不是二进制.
要么:
File.open("out.cake", 'wb' ) do |output|
array.each do | byte |
output.print byte.chr
end
end
Run Code Online (Sandbox Code Playgroud)
看起来它有效,但后来我无法将其读入阵列.
我应该使用哪种编码?
我有一个类似C的结构:
SomeStruct << BinData::Record
endian :little
uint32 :offsetOfName
uint32 :offsetOfLastname
#...
uint32 :lenVars
struct :Person, :length => :lenVars
string :name
string :lname
#...
end
Run Code Online (Sandbox Code Playgroud)
我之前有很多偏移和长度:Person
.所有偏移量和长度都描述了:Person
结构中的数据.
如何在指定的偏移量,给定长度或直到下一个偏移量开始读取数据?
假设我想创建50个长度为100的二进制变量,每个变量彼此相关.
因为我用指定的rho创建了一个相关矩阵:
cor.mat <- matrix(0.2,nrow=50, ncol=50)
diag(cor.mat) <- 1
Run Code Online (Sandbox Code Playgroud)
接下来我使用rmvbin
:
library(bindata)
rmvbin<-rmvbin(100, margprob=x, bincorr=cor.mat)
Run Code Online (Sandbox Code Playgroud)
但是,我不确定如何计算margprob参数.有人可以帮忙吗?
它应该是每行和每列概率之和的向量吗?
我正在使用Ruby和BinData gem 实现数据结构.我需要实现一个Choice
值.根据BinData文档,可以选择实现:
class MyData < BinData::Record
uint8 :type
choice :data, :selection => :type do
type key #option 1
type key #option 2
end
end
Run Code Online (Sandbox Code Playgroud)
我需要在选择中有一个默认选项:
class MyRecord < BinData::Record
uint8 :type
choice :mydata, :selection => :type do
uint32 0
uint16 1
end
end
Run Code Online (Sandbox Code Playgroud)
如果type
不是0
或1
在上面的代码中,如何处理?