整数转数组说明

问题描述

请帮忙

我知道您正在阅读本文,如果没有答案,我将不胜感激,因为我觉得只有我一个人在努力解决这个问题。

这是如何工作的?

我已彻底阅读this document。它提到了一个名为 TimestampScale 的元素。我已经下载了大约 30 个 WebM 示例文件,并看到 HEX { 0x2AD7B12A D7 B1 或 {{1} 后面的值} } 或 NON-HEX 整数 { ['2A','D7','B1'] 42 215177 } 始终相同:HEX { [42,215,177]0x830F4240 83 0F 4240 } 或 非十六进制整数 { {{1 }} ['83','0F','42','40'] 131 1566 }。这些值都应该是 64认值,如 Matroska 元素规范中所述。所以问题是……[131,15,66,64] 是如何变成 1000000 的?

上面的Incase对你来说太草率了或者你想要更多的解释:

0x830F4240

所有值如何以十六进制和整数显示

1000000

目标:

目标是弄清楚如何将值转换为 The TimestampScale identifier is equal to 0x2AD7B1. This is in Hexadecimal formatting. The ways I format it in HEX are: 0x2AD7B1 2A D7 B1 ['2A','B1'] The ways I format it in Integers are: 42 215 177 [42,177] Its preceding values are taken from a Uint8Array: | 131,64 | after the Hexadecimal values are taken. This is NOT in Hexadecimal formatting. The reason why is because that is the raw data and I want to be as open with you as possible. The ways I format it in HEX are: 0x830F4240 83 0F 42 40 ['83','40'] The ways I format it in Integers are: 131 15 66 64 [131,64] So question is: how does | 131,64 | or 0x830F4240 equal 1000000? ,这样我就可以在 Matroska 元素规范中的其他元素上使用这种转换(例如持续时间转换)。

解决方法

WebM 容器格式是 Matroska 容器格式的子集。

Matroska 基于 EBML (Extensible Binary Meta Language)

EBML 文档由元素组成。

元素由元素 ID、元素数据大小和元素数据组成。

元素数据大小是一个可变大小的整数。 (元素 ID 也是可变大小的整数。)

可变大小整数使用如下所示的位模式类型,其中前导位表示使用了多少字节,x 位存储实际值。

  • 1 字节:1xxxxxxx
  • 2 字节:01xxxxxx xxxxxxxx
  • 3 字节:001xxxxx xxxxxxxx xxxxxxxx
  • 4 字节:0001xxxx xxxxxxxx xxxxxxxx xxxxxxxx

等等

你提到的 TimestampScale 元素是由

  • 元素 ID 2A D7 B1
  • 元素数据大小83(一个 1 字节的可变大小整数,表示后面有 3 个字节的元素数据)
  • 元素数据 0F 42 40(十进制 1000000 的大端编码)