diff --git a/DiscImageChef.Helpers/StringHandlers.cs b/DiscImageChef.Helpers/StringHandlers.cs index 51102d9ab..3a227d469 100644 --- a/DiscImageChef.Helpers/StringHandlers.cs +++ b/DiscImageChef.Helpers/StringHandlers.cs @@ -53,14 +53,14 @@ namespace DiscImageChef /// The corresponding C# string /// A null-terminated (aka C string) byte array in the specified encoding /// Encoding. - public static string CToString(byte[] CString, Encoding encoding, bool twoBytes = false) + public static string CToString(byte[] CString, Encoding encoding, bool twoBytes = false, int start = 0) { if(CString == null) return null; int len = 0; - for(int i = 0; i < CString.Length; i++) + for(int i = start; i < CString.Length; i++) { if(CString[i] == 0) { @@ -82,7 +82,7 @@ namespace DiscImageChef } byte[] dest = new byte[len]; - Array.Copy(CString, 0, dest, 0, len); + Array.Copy(CString, start, dest, 0, len); return len == 0 ? "" : encoding.GetString(dest); } @@ -103,15 +103,15 @@ namespace DiscImageChef /// The corresponding C# string /// A length-prefixed (aka Pascal string) ASCII byte array /// Encoding. - public static string PascalToString(byte[] PascalString, Encoding encoding) + public static string PascalToString(byte[] PascalString, Encoding encoding, int start = 0) { if(PascalString == null) return null; - byte length = PascalString[0]; + byte length = PascalString[start]; int len = 0; - for(int i = 1; i < length + 1 && i < PascalString.Length; i++) + for(int i = start + 1; i < length + 1 && i < PascalString.Length; i++) { if(PascalString[i] == 0) break; @@ -120,7 +120,7 @@ namespace DiscImageChef } byte[] dest = new byte[len]; - Array.Copy(PascalString, 1, dest, 0, len); + Array.Copy(PascalString, start + 1, dest, 0, len); return len == 0 ? "" : encoding.GetString(dest); } @@ -141,16 +141,16 @@ namespace DiscImageChef /// The corresponding C# string /// A space (' ', 0x20, ASCII SPACE) padded ASCII byte array /// Encoding. - public static string SpacePaddedToString(byte[] SpacePaddedString, Encoding encoding) + public static string SpacePaddedToString(byte[] SpacePaddedString, Encoding encoding, int start = 0) { if(SpacePaddedString == null) return null; - int len = 0; + int len = start; - for(int i = SpacePaddedString.Length; i >= 0; i--) + for(int i = SpacePaddedString.Length; i >= start; i--) { - if(i == 0) + if(i == start) return ""; if(SpacePaddedString[i - 1] != 0x20) @@ -160,7 +160,7 @@ namespace DiscImageChef } } - return len == 0 ? "" : encoding.GetString(SpacePaddedString, 0, len); + return len == 0 ? "" : encoding.GetString(SpacePaddedString, start, len); } ///