更好地理解 Kaitai Struct 的 32 位转换器

Posted

技术标签:

【中文标题】更好地理解 Kaitai Struct 的 32 位转换器【英文标题】:Understanding Kaitai Struct's 32 bit converter better 【发布时间】:2020-09-02 23:56:20 【问题描述】:

我是二进制解释的新手,我想确保我理解我正在查看的数据。特别是我正在查看小端序中的 2 个字节:

这是一个时间戳,它在对象树中显示以下值:

在转换器中显示:

对我来说“正确”的值是未分配的 i32le 值 1599082994,它对应于 2020 年 9 月 2 日星期三晚上 9:43:14 的 UTC 时间戳。

我想我有两个主要问题:

    如何告诉 Kaitai Struct 将字节解析为 i32le,以便在对象树中显示 1599082994,而不是 i16le 值 4594?

    如何将字节 f2 11 转换为 32 位未分配值。当我尝试运行以下基本 c# 程序时,我无法将这些字节转换为 32 位未分配值,但确实成功地将它们转换为 16 位未分配值。

或者我猜是秘密问题 3,我认为这一切都错了吗?

static void Main(string[] args)


            var hexString = "f211";
            var bytes = StringToByteArray(hexString);

            var val1 = BitConverter.ToUInt16(bytes);//works
            var val2 = BitConverter.ToUInt32(bytes);//error

        

        public static byte[] StringToByteArray(String hex)
        
            int NumberChars = hex.Length;
            byte[] bytes = new byte[NumberChars / 2];
            for (int i = 0; i < NumberChars; i += 2)
                bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
            return bytes;
        

【问题讨论】:

【参考方案1】:

别管这个问题,我们得到了导致一些混乱的错误文档。

【讨论】:

以上是关于更好地理解 Kaitai Struct 的 32 位转换器的主要内容,如果未能解决你的问题,请参考以下文章

使用 Kaitai Struct 时出现 EOF 错误

kaitai struct 中实现了哪些解析器技术?它是不是实现回溯?

Python:使用 Kaitai Struct 读取 ID3v1 标签

更好地理解外部“C”函数

更好地理解内存释放

python系列教程125——struct模块