打开主菜单

Ballance Wiki β

更改

Database.tdb/zh

添加15字节2020年5月9日 (六) 19:23
无编辑摘要
== 文件结构 ==
此处介绍的是针对1.13版本,即具有13关补丁的Database.tdb的文件格式进行介绍。此外还有一个版本的Database.tdb,其对应Ballance v1.0版本。由于1.0版本的文件结构中仅仅缺少了v1.13中的部分字段,因此会在后续介绍v1.13版本的结构中标明哪些字段在v1.0版本的文件结构中不存在0版本的文件结构中不存在。
后文叙述中,比特之间左为高位,字节之间右为高位。(与HxD排布一致)后文叙述中,比特之间左为高位,字节之间右为高位(与HxD排布一致)。
后文中有关字符串的存储是指:先以ASCII进行序列化。然后与C语言类似,在字符串的末尾存储<code>0x00</code>以表示字符串结束。
后文中的Int32类型和Float类型存储均是大端序存储模式,Float使用IEEE-754标准进行存储754标准进行存储。
=== 加密解开 ===
首先,解密是以字节为单位进行的。每个字节有8个比特,解密的第一步是还原比特顺序,将这8个比特的高位3比特和低位5比特交换位置,完成解密的第一步。如下图:
<code>BIT_1 BIT_2 BIT_3 BIT_4 BIT_5 BIT_6 BIT_7 BIT_8</code>经过变换后得到<code>BIT_4 BIT_5 BIT_6 BIT_7 BIT_8 BIT_1 BIT_2 BIT_3</code>
可通过代码(<nowiki>C#</nowiki>)实现:<code>j = (byte)(j << 3 | j >> 5);</code>
==== 异或补码变换 ====
此后需要进行异或补码变换,首先将交换比特结束后的字节与<code>0xAF</code>做异或(XOR)运算,然后对得到的字节再取补码,即最高位取反,其余位取反后+1。此时,文件的加密已解开。
可通过代码(<nowiki>C#</nowiki>)实现:<code>j = (byte)(-(j ^ 0xAF));</code>
=== Virtools Array ===
3,425
个编辑