1

各要素として 2 進数または 16 進数の値が格納されている配列を 64 ビットの Double Mac Absolute Time に変換することはできますか? p var_bytesコンソールを使用してアレイを検査すると、次の出力が表示されます。

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

上記の配列要素を 64bit Double Mac Absolute Time の文字列として変換することは可能ですか?

私のコードは単純なものに従っています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 でエラーが発生せず、MAC エポック時間に従って変換する簡単な方法は何でしょうか?

4

1 に答える 1

2

これを試して:

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

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

ここbinで、倍精度浮動小数点数の 8 バイト表現です。

データの取得元に応じて、「D」を「E」または「G」に変更する必要がある場合があります。unpack詳細については、ドキュメントを確認してください。

于 2012-04-07T08:14:03.237 に答える