/// <summary> /// バイト配列からインスタンスを生成する。 /// 配列末尾に不要なデータがあっても無視する。 /// </summary> /// <param name="src">変換対象byte配列</param> /// <param name="offset">読み込み開始オフセット</param> public WoditorString(ref byte[] src, long offset = 0) { var innerOffset = offset; var lengthByte = new byte[4]; for (var i = 0; i < 4; i++) { lengthByte[i] = src[innerOffset]; innerOffset++; } var length = lengthByte.ToInt32(Endian.Woditor); // 文字列の末尾に '0' が付与されているため、一部の処理では無視する var removeZeroLength = length - 1; var chars = new byte[removeZeroLength]; Array.Copy(src, innerOffset, chars, 0, removeZeroLength); String = ToEncoding.ToUnicode(chars); // 長さ ByteLength = (int)(innerOffset - offset) + length; // byte配列 var copy = new byte[ByteLength]; Array.Copy(src, offset, copy, 0, ByteLength); StringByte = copy; }
/// <summary>stringからインスタンスを生成する</summary> public WoditorString(string src) { // 文字列 String = src; foreach (var(originStr, commandStr) in SpecialConversionStringList) { String = String.Replace(commandStr, originStr); } // byte配列 var unityNewLineString = String; if (unityNewLineString.IsEmpty() || unityNewLineString.Last() != 0x00) { // 末尾 '0' が欠けているため補正 unityNewLineString += '\0'; } var stringByte = ToEncoding.ToSJIS(unityNewLineString); var lengthByte = stringByte.Length.ToBytes(Endian.Woditor); var strBytes = new List <byte>(); strBytes.AddRange(lengthByte); strBytes.AddRange(stringByte); StringByte = strBytes; // 長さ ByteLength = strBytes.Count; }
protected string ConvertByteToString(byte[] bytes) { if (bytes[0] == 0) { return(""); } int num = 0; while (num < bytes.Length && bytes[num] != 0) { num++; } byte[] array = new byte[num]; for (int i = 0; i < num; i++) { array[i] = bytes[i]; } string result; try { result = ToEncoding.ToUnicode(array); } catch (Exception) { byte[] array2 = new byte[array.Length - 1]; for (int j = 0; j < array.Length - 1; j++) { array2[j] = array[j]; } try { result = ToEncoding.ToUnicode(array2); } catch (Exception ex) { Console.WriteLine("Failed to read buf: {0}", Utils.HexDump(array, 16)); using (FileStream fileStream = File.Create("__debug.dat")) { fileStream.Write(array, 0, array.Length); } throw ex; } } return(result); }
protected string ConvertByteToString(byte[] bytes) { if (bytes[0] != 0) { int i; for (i = 0; i < bytes.Length && bytes[i] != 0; i++) { } byte[] array = new byte[i]; for (int j = 0; j < i; j++) { array[j] = bytes[j]; } try { return(ToEncoding.ToUnicode(array)); } catch (Exception) { byte[] array2 = new byte[array.Length - 1]; for (int k = 0; k < array.Length - 1; k++) { array2[k] = array[k]; } try { return(ToEncoding.ToUnicode(array2)); } catch (Exception ex) { Console.WriteLine("Failed to read buf: {0}", Utils.HexDump(array, 16)); using (FileStream fileStream = File.Create("__debug.dat")) { fileStream.Write(array, 0, array.Length); } throw ex; } } } return(""); }