很抱歉,我已经有近20年没有接触过 C/C++
了。
我想将这段代码翻译成 Java 8,我在这个参考手册中找到了它。 我是在这个链接中读到的。
你可以阅读...
二进制模板编写起来很容易,与 C/C++ 结构相似,只不过可能包含 if、for 或 while 语句以及函数或复杂表达式。
足够强大以解析几乎任何二进制文件格式。
可以在打开文件时自动运行。
模板可以共享,在我们的模板库中可下载模板列表。
我开始并在第 2063
行找到了它(很抱歉,我只能翻译出悲伤的四行!)。
APFS apfs(0);
我在阅读 C - 结构体中的函数,但是看起来有很多不同!
回顾时,我跳到了第1994行,它看起来像一个带有函数调用的结构体,而不是具有属性!!!.
typedef struct APFS(uint64 apfs_offset) {
DefineApfsContainer(apfs_offset);
} ;
您可以立即在第 1998
行看到。
void DefineApfsContainer(uint64 apfs_offset) {
Apfs_Offset = apfs_offset;
FSeek(Apfs_Offset);
if (!CheckApfsAndSetBlockSize()) {
Printf("\nError, starting point not an APFS container superblock. Set the 'Apfs_Offset' variable to correct value!");
Exit(1);
}
obj csb;//container super block in block zero
SeekBlock(csb.body.xp_desc_base);
CheckpointDesc cp(csb.body.xp_desc_blocks);
//SeekBlock(csb.body.xp_data_base);
//obj checkpoint_data_nx[csb.body.xp_data_blocks] <optimize=false>;
// Checkpoint processing
local uint i = 0;
local uint64 max_xid = 0;
local uint64 max_xid_block_pos = 0;
SeekBlock(csb.body.xp_desc_base);
local uint64 base_pos = FTell();
local uint64 pos = 0;
for (i=0; i< csb.body.xp_desc_blocks; ++i) { // assuming cont. blocks
if (cp.checkpoint_desc_nx[i].hdr.type == obj_type_container_superblock) {
if (cp.checkpoint_desc_nx[i].hdr.xid >= max_xid) {
// validate it
pos = base_pos + (i * Block_Size);
if (fletcher64(pos, Block_Size) == 0) {
max_xid = cp.checkpoint_desc_nx[i].hdr.xid;
max_xid_block_pos = pos;
}
}
}
}
if (max_xid > csb.hdr.xid)
Printf("\nFound newer xid=%Lu @ offset 0x%Lu. Using this Container superblock.", max_xid, pos);
FSeek(pos);
obj valid_csb;
BookmarkVolumes(valid_csb);
if (valid_csb.body.efi_jumpstart) {
SeekBlock(valid_csb.body.efi_jumpstart);
obj efi_info;
}
/*if (valid_csb.body.keylocker_block_count) {
SeekBlock(valid_csb.body.keylocker_paddr);
obj keybag; // This is encrypted!
}*/
}
为了进行翻译,我需要理解这段代码的编码方式(我不是指代码本身,而是编码方式)。 如何理解这段代码(将函数作为结构还是从函数中创建结构)?
主要内容。 如何将其翻译成Java?