1

是否可以将具有存储为每个元素的二进制或十六进制值的数组转换为 64 位双 Mac 绝对时间?p var_bytes当我使用控制台检查数组时显示以下输出。

\000\000\000\000\000\000\000\000\000\000\000\234\225x\266A\000\000\000\345\005\230\264

是否可以将 64 位双 Mac 绝对时间中的上述数组元素转换为字符串?

我的代码只是一个简单的do..end

puts "\nClose off the page header#{y.unpack("n")}\n"
            z.scan(/(.{8})(.{8})(.{4})(.{4})(.{4})(.{4})(.{8})(.{8})(.{8})(.*\w)/m).each do |j,k,l,m,n,o,p,q,r,s|
                puts "\nContent1#{j.unpack("n")}\n"
                puts "\nContent2:#{k.unpack("n")}\n"
                puts "\nContent3:#{l.unpack("n")}\n"
                puts "\nContent4:#{m.unpack("n")}\n"
                puts "\nContent5:#{n.unpack("n")}\n"
                puts "\nContent6:#{o.unpack("n")}\n"
                puts "\nContent7:#{p.unpack("n")}\n"
                expdt = Time.at((q.unpack("L"))[0])
                createdt = Time.at((r.unpack("L"))[0])
                puts "Date1:\n#{expdt}\n"
                puts "\nDate2:\n#{createdt}\n"
                puts "\nCookie:\n"
                puts s.split(/\0/m)
            end
        end

将这个负值转换为正值的简单方法是什么,以便 Time.at 不会给出错误,然后根据 MA​​C Epoch 时间进行转换?

4

1 回答 1

2

Try this:

MAC_EPOCH = Time.gm(2001,1,1)

def bin2time(bin)
    return MAC_EPOCH + (bin.unpack "D")[0]
end

where bin is an 8-byte representation of a double precision float.

you may need to change "D" to "E" or "G" depending on where you are getting your data from. check the unpack docs for details.

于 2012-04-07T08:14:03.237 回答