毫秒的十六进制是怎么回事?

问题描述

我有88 40 B0 00。他们是十六进制。我不明白如何,但它们代表了几个纳秒。我需要帮助理解 this document,它概述了 Matroska 和 WebM 元数据编码。我对此比较陌生,但我正在使用 JavaScript 来更改文件持续时间。我目前使用的是有效的,但目标是知道如何设置 WebM 视频文件自定义持续时间。该文档显示了持续时间参数的以下内容

  • 元素名称
    • 持续时间
  • EBML 树中的级别
    • 2
  • 元素 ID 显示为八位字节
    • 0x4489
  • 强制性
  • 可能出现多次
  • 包含在
    • 1
    • 2
    • 3
    • 4
  • 可在 WebM 中使用
    • 真的
  • 说明
    • 基于 TimestampScale 的 Segment 持续时间(以纳秒为单位)

我使用的是认时间戳刻度 (1000000)。我的问题是如何获取这些十六进制值,并将它们转换为 hours:minutes:seconds:milliseconds。我简直被难住了:(0x8840B000 对我没有帮助。

解决方法

请参阅有关 TimestampScale Element 的堆栈溢出问题。

在这个问题中,您询问的是持续时间元素。

你提到的持续时间元素是由

  • 元素 ID 44 89
  • 元素数据大小88(一个 1 字节的可变大小整数,表示后面有 8 字节的元素数据)
  • 元素数据 40 B0 00 00 00 00 00 00(十进制 4096 的大端 64 位浮点表示)

在 JavaScript 中,您可以使用如下代码将这 8 个字节转换为它们代表的相应浮点值(改编自 an answer 到问题 Convert uint8array to double in javascript

let b = new Uint8Array([0x40,0xB0,0x00,0x00]);
let f = (new DataView(b.buffer)).getFloat64();

当 TimestampScale 值为默认值(一百万纳秒)时,Duration 值以毫秒为单位。在本例中,持续时间为 4096 毫秒或 4.096 秒。

如果您想要以纳秒为单位的持续时间,请将持续时间值乘以 TimestampScale 值。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...