/// <summary> /// Parses a length-prefixed string. /// </summary> /// <returns>The parsed string.</returns> public string ReadString() { uint length = ReadVarUInt32(); byte[] bytes = ReadBytes((int)length); return(StringEncoding.GetString(bytes)); }
private static string ReadString(BinaryReader reader, int length) { var data = reader.ReadBytes(length); var terminatorIndex = Array.FindIndex(data, x => x == 0); return(StringEncoding.GetString(data, 0, terminatorIndex < 0 ? length : terminatorIndex)); }
public static RoleTest Read(byte[] buffer, int offset) { var msg = new RoleTest(); msg.RoleId = BitConverter.ToInt16(buffer, offset); offset += 2; var RoleNameLength = buffer[offset]; offset++; msg.RoleName = StringEncoding.GetString(buffer, offset, RoleNameLength); offset += RoleNameLength; msg.Id = Int24.ReadInt24(buffer, offset); offset += 3; var countIds = buffer[offset]; offset++; var listIds = new List <int>(); for (var i = 0; i < countIds; i++) { var item = Int24.ReadInt24(buffer, offset); offset += 3; listIds.Add(item); } msg.Ids = listIds; return(msg); }
public string ReadString() { short length = ReadInt16(); if (length == 0) { return(string.Empty); } var data = ReadUInt8Array(length * 2); return(StringEncoding.GetString(data)); }
/// <summary> /// Reads a string from the base address of the process memory (some values, such as player name, require this) /// </summary> /// <param name="address">The address of the string to read</param> /// <param name="maxSize">The maximum size of the string</param> /// <returns></returns> public string ReadStringBase(IntPtr address, int maxSize = 512) { var memoryStringBytes = _mem.ReadMemory(GameProcess.Id, BaseAddress + (int)address, maxSize); // This differs from the above here, in that you must add the offset to the base address in order to read it. var ret = StringEncoding.GetString(memoryStringBytes); if (ret.IndexOf('\0') != -1) { ret = ret.Remove(ret.IndexOf('\0')); } return(ret); }
/// <summary> /// Reads a string from the process memory /// </summary> /// <param name="address">The address of the string to read</param> /// <param name="maxSize">The maximum size of the string</param> /// <returns></returns> public string ReadString(IntPtr address, int maxSize = 512) { var memoryStringBytes = _mem.ReadMemory(GameProcess.Id, address, maxSize); var ret = StringEncoding.GetString(memoryStringBytes); if (ret.IndexOf('\0') != -1) { ret = ret.Remove(ret.IndexOf('\0')); } return(ret); }
public unsafe object MarshalNativeToManaged(IntPtr nativeData) { if (nativeData == IntPtr.Zero) { return(null); } var bytes = (byte *)nativeData; var nbBytes = 0; while (*(bytes + nbBytes) != 0) { nbBytes++; } return(StringEncoding.GetString(bytes, nbBytes)); }
public bool TryDecodeValue(byte[] buffer, int index, out string value, out int bytesRead, out string error) { value = null; var result = TryReadReadCAStringAsArray(buffer, index, StringEncoding, IsOptStr, out error, out int stringStrt, out int stringLength, out bytesRead); if (result) { if (stringLength != 0) { value = StringEncoding.GetString(buffer, stringStrt, stringLength); } else { value = ""; } } return(result); }
public static User Read(byte[] buffer, int offset) { var msg = new User(); msg.UInt16 = BitConverter.ToUInt16(buffer, offset); offset += 2; msg.Char = (Char)buffer[offset]; offset++; msg.Bool = buffer[offset] == 1; offset++; msg.Int16 = BitConverter.ToInt16(buffer, offset); offset += 2; msg.UShort = BitConverter.ToUInt16(buffer, offset); offset += 2; msg.Id = BitConverter.ToUInt16(buffer, offset); offset += 2; var countIdList = buffer[offset]; offset++; var listIdList = new List <int>(); for (var i = 0; i < countIdList; i++) { var item = BitConverter.ToUInt16(buffer, offset); offset += 2; listIdList.Add(item); } msg.IdList = listIdList; var countboolList = buffer[offset]; offset++; var listboolList = new List <bool>(); for (var i = 0; i < countboolList; i++) { var item = buffer[offset] == 1; offset++; listboolList.Add(item); } msg.boolList = listboolList; var countIntList = buffer[offset]; offset++; var listIntList = new List <int>(); for (var i = 0; i < countIntList; i++) { var item = BitConverter.ToInt32(buffer, offset); offset += 4; listIntList.Add(item); } msg.IntList = listIntList; var countfloatList = buffer[offset]; offset++; var listfloatList = new List <float>(); for (var i = 0; i < countfloatList; i++) { var item = BitConverter.ToSingle(buffer, offset); offset += 4; listfloatList.Add(item); } msg.floatList = listfloatList; var countStringList = buffer[offset]; offset++; var listStringList = new List <string>(); for (var i = 0; i < countStringList; i++) { var strLength = buffer[offset]; offset++; var item = StringEncoding.GetString(buffer, offset, strLength); offset += strLength; listStringList.Add(item); } msg.StringList = listStringList; var RoleLength = buffer[offset]; offset++; if (RoleLength == 0) { msg.Role = null; } else { var _buffer = new ArraySegment <byte>(buffer, offset, RoleLength).ToArray(); msg.Role = Role.Read(_buffer, 0); offset += RoleLength; } var countRoleList = buffer[offset]; offset++; var listRoleList = new List <Role>(); for (var i = 0; i < countRoleList; i++) { var _RoleLength = buffer[offset]; offset++; if (_RoleLength == 0) { listRoleList.Add(null); } else { var _buffer = new ArraySegment <byte>(buffer, offset, _RoleLength).ToArray(); listRoleList.Add(Role.Read(_buffer, 0)); offset += _RoleLength; } } msg.RoleList = listRoleList; return(msg); }
private string BytesToString(byte[] bytes) { return(StringEncoding.GetString(bytes)); }
public string ReadString() { return(StringEncoding.GetString(ReadUInt8Array())); }
public bool TryDecodeFixedLength(byte[] buffer, int index, int length, out string value, out int bytesRead) { value = StringEncoding.GetString(buffer, index, length); bytesRead = length; return(true); }
public static int processMsg(List <JFPackage.IPackage> pages, System.Action <bool> cb) { try { //if(pages.Count!=0) // GameDebug.LogError("before Pages count"+pages.Count); for (int i = 0; i < pages.Count; ++i) { JFPackage.IPackage pag = pages[i]; NetMgr.getSingleton().perfact(pag.ID); if (pag.ID == (uint)JFPackage.MSG_ID.LISTKILL) { JFPackage.PAG_ListKill kill = (JFPackage.PAG_ListKill)pag; GameDebug.Log("recv list of killed:" + kill._cnt); List <JFPackage.killBeKilledData> listStruct = new List <JFPackage.killBeKilledData>(); JFTools.bytesToArrayStruct(kill._inner, kill._cnt, listStruct); foreach (var v in listStruct) { GameDebug.Log("Array Info: " + " id:" + v._id + " beKilled:" + v._beKilled + " killed:" + v._killed + " name:" + StringEncoding.GetString(v._name)); } } else if (pag.ID == (uint)JFPackage.MSG_ID.NOTIFY) { JFPackage.PAG_Notify no = (JFPackage.PAG_Notify)pag; GameDebug.Log("NotifyMessage:" + StringEncoding.GetString(no._attack) + "杀死了" + StringEncoding.GetString(no._target)); } else if (pag.ID == (uint)JFPackage.MSG_ID.REGIST) { JFPackage.PAG_REGIST reg = (JFPackage.PAG_REGIST)pag; GameDebug.Log(StringEncoding.GetString(reg._name) + ":" + StringEncoding.GetString(reg._pwd)); } else if (pag.ID == (uint)JFPackage.MSG_ID.MAPINFO) { JFPackage.PAG_MAPINF mapInof = (JFPackage.PAG_MAPINF)pag; Hero.NotifyMapInfo(mapInof._x, mapInof._z, mapInof._block); } else if (pag.ID == (uint)JFPackage.MSG_ID.JUMPINMAP) { JFPackage.PAG_JUMPINMAP jim = (JFPackage.PAG_JUMPINMAP)pag; PlayerSys.getSingleton().getHero().NotifyJumpInMap(jim._id.ToString(), new Map.position(jim._x, jim._z)); } else if (pag.ID == (uint)JFPackage.MSG_ID.ATTR) { JFPackage.PAG_ATTR attr = (JFPackage.PAG_ATTR)pag; if (Hero != null) { Hero.AttrInit(attr._id.ToString(), attr._maxHp, attr._maxMp, attr._hp, attr._mp, attr._def, attr._maxShiled, attr._shiled); } else { GameDebug.LogError("hero is null"); } } else if (pag.ID == (uint)JFPackage.MSG_ID.ATTRCHG) { JFPackage.PAG_ATTRCHG attr = (JFPackage.PAG_ATTRCHG)pag; int action = attr._action; if (Hero.ID != attr._targetID) { Hero.NotifyFight(attr._attackID, attr._targetID, attr._action); } if (attr._delay <= 0) { Hero.NotifyAttrChg(attr._targetID.ToString(), attr._type, attr._num); } else { Hero.NotifyAttrChgDelay(attr._targetID.ToString(), attr._type, attr._num, attr._delay); } GameDebug.Log(attr._attackID + " fight " + attr._targetID + ":" + ((Player.ENUM_SKILL_TYPE)attr._action).ToString() + ":" + ((Creature.ENUM_ATTR)attr._type).ToString() + ":" + attr._num); } else if (pag.ID == (uint)JFPackage.MSG_ID.Error) { JFPackage.PAG_ERROR error = (JFPackage.PAG_ERROR)pag; GameDebug.LogError("msg Error:" + ((JFPackage.MSG_ID)error._theMsgid).ToString() + ":" + ((JFPackage.ERROR_CODE)error._errorCode).ToString()); } else if (pag.ID == (uint)JFPackage.MSG_ID.REGIST) { JFPackage.PAG_REGIST reg = (JFPackage.PAG_REGIST)pag; GameDebug.Log("Register Success!!!" + reg._name + ":" + reg._pwd); } else if (pag.ID == (uint)JFPackage.MSG_ID.DELETE) { JFPackage.PAG_DELETE del = (JFPackage.PAG_DELETE)pag; PlayerSys.getSingleton().getHero().NotifyRemove(del._id.ToString()); } else if (pag.ID == (uint)JFPackage.MSG_ID.CREATE) { JFPackage.PAG_CREATE create = (JFPackage.PAG_CREATE)pag; Map.position pos = new Map.position(create._x, create._z); pos._dir = create._dir; CreateSize++; //GameDebug.Log("CreateSize:"+CreateSize+":("+create._x+":"+create._z+")"); string name = StringEncoding.GetString(create._name); if (create._type == 0) // hero { PlayerSys.getSingleton().createHero(create._id, pos, 0, name); } else // others player { PlayerSys.getSingleton().getHero().NotifyAdd(create._type, create._id.ToString(), pos, 0, name); } } else if ((uint)JFPackage.MSG_ID.WALK == pag.ID) { JFPackage.PAG_WALK walk = (JFPackage.PAG_WALK)pag; Map.position pos = new Map.position(walk._x, walk._z); pos._dir = (int)walk._dir; PlayerSys.getSingleton().getHero().NotifyMove(walk._id.ToString(), pos); } else if (pag.ID == (uint)JFPackage.MSG_ID.FIGHT) { JFPackage.PAG_FIGHT fight = (JFPackage.PAG_FIGHT)pag; Player hero = PlayerSys.getSingleton().getHero(); if (fight._action == 8) { GameDebug.Log("BOSS 召唤了卫兵,请小心."); } //if(fight._id != PlayerSys.getSingleton().getHero().ID) { PlayerSys.getSingleton().getHero().NotifyFight(fight._id, fight._target, fight._action); } //else { // hero.fight(fight._action,PlayerSys.getSingleton().getControl().curPos); } } else if (pag.ID == (uint)JFPackage.MSG_ID.CONNECTED) { //short id = 0; //PlayerSys.getSingleton().createHero(id,new Map.position(0,0)); } else if (pag.ID == (uint)JFPackage.MSG_ID.TEST_STRING) { JFPackage.PAG_STRING pag64 = (JFPackage.PAG_STRING)pag; GameDebug.Log("recv 1000:" + StringEncoding.GetString(pag64.content)); } else if ((uint)JFPackage.MSG_ID.TEST_STRUCTURE == pag.ID) { JFPackage.PAG_STRUCTURE inner = (JFPackage.PAG_STRUCTURE)pag; // * Funck 内存对齐,字符串长度问题。byte[] 中如果有0的话,转成string,长度有问题。 string desc = StringEncoding.GetString(inner.dest); string name = StringEncoding.GetString(inner.name); string sex5 = StringEncoding.GetString(inner.sex5); GameDebug.Log("recv 1001:" + name + ":" + desc + ":" + sex5); } else if ((uint)JFPackage.MSG_ID.TEST_ARRAY == pag.ID) { JFPackage.PAG_ARRAY array = (JFPackage.PAG_ARRAY)pag; GameDebug.Log("recv 1002:" + array._cnt); List <JFPackage.PAG_ArrayInner> listStruct = new List <JFPackage.PAG_ArrayInner>(); JFTools.bytesToArrayStruct(array._inner, array._cnt, listStruct); foreach (var v in listStruct) { GameDebug.Log("Array Info: " + " name:" + StringEncoding.GetString(v.name) + " dest:" + StringEncoding.GetString(v.dest) + " sex5:" + StringEncoding.GetString(v.sex5)); } } else { GameDebug.LogError("PAG ID Not FIND!!!" + pag.ID); } } if (pages.Count != 0) { ProcessNumTotal += pages.Count; //Debug.Log("processMsg call , Num pages process :"+ProcessNumTotal); } } catch (System.Exception e) { GameDebug.LogError("MSGProcess Error:" + pages.Count + ":" + e); pages.Clear(); return(-1); } if (pages.Count != 0) { //GameDebug.LogError("after Pages count"+pages.Count); pages.Clear(); } return(0); }