import {NativeStruct} from "../../struct/NativeStruct"; import {il2cppApi} from "../../il2cppApi"; export class Il2cppString extends NativeStruct { static parser(systemString){ if (systemString.isNull()){ return"指针空"; } let length = il2cppApi.il2cpp_string_length(systemString); let il2cppStringChars = il2cppApi.il2cpp_string_chars(systemString); let content=""; for (let i = 0; i < length; i++) { let offset = i * 2; let s = il2cppStringChars.add(offset).readU16().toString(16); if (s.toString().length === 2) { let s2 = il2cppStringChars.add(offset).readCString(); content = content + s2; } else { //转换unicode let unicode = "\\u" + s.toString(); let decodeUnicode1 = this.decodeUnicode(unicode); content = content + decodeUnicode1; } } return content; } getCString() { if (this.isNull()){ return "指针空"; } let length = this.getLength(); //长度4字节本身偏移16 从20位开始 let il2cppStringChars = il2cppApi.il2cpp_string_chars(this); let content=""; for (let i = 0; i < length; i++) { let offset = i * 2; let s = il2cppStringChars.add(offset).readU16().toString(16); // console.log("il2cppStringChars:" + s); //转unicode if (s.toString().length === 2) { let s2 = il2cppStringChars.add(offset).readCString(); // log("s2:"+s2); content = content + s2; } else { //转换unicode let unicode = "\\u" + s.toString(); // log("unicode:" + unicode); let decodeUnicode1 = this.decodeUnicode(unicode); content = content + decodeUnicode1; // log("s2:"+this.decodeUnicode(unicode)); } // let s1 = String.fromCharCode(unicode); } if (content === undefined) { return ""; } return content; } getLength() { return il2cppApi.il2cpp_string_length(this); } static decodeUnicode(str) { let replace = str.replace(/\\/g, "%"); return unescape(replace); } }