|
|
|
@ -140,26 +140,27 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Exif |
|
|
|
|
|
|
|
private unsafe string ConvertToString(ReadOnlySpan<byte> buffer) |
|
|
|
{ |
|
|
|
#if NETSTANDARD1_1
|
|
|
|
byte[] bytes = buffer.ToArray(); |
|
|
|
Span<byte> nullChar = stackalloc byte[1] { 0 }; |
|
|
|
|
|
|
|
string result = Encoding.UTF8.GetString(bytes, 0, buffer.Length); |
|
|
|
int nullCharIndex = buffer.IndexOf(nullChar); |
|
|
|
|
|
|
|
if (nullCharIndex > -1) |
|
|
|
{ |
|
|
|
buffer = buffer.Slice(0, nullCharIndex); |
|
|
|
} |
|
|
|
|
|
|
|
#if NETSTANDARD1_1
|
|
|
|
return Encoding.UTF8.GetString(buffer.ToArray(), 0, buffer.Length); |
|
|
|
#elif NETCOREAPP2_1
|
|
|
|
return Encoding.UTF8.GetString(buffer); |
|
|
|
#else
|
|
|
|
string result; |
|
|
|
|
|
|
|
fixed (byte* pointer = &MemoryMarshal.GetReference(buffer)) |
|
|
|
{ |
|
|
|
result = Encoding.UTF8.GetString(pointer, buffer.Length); |
|
|
|
return Encoding.UTF8.GetString(pointer, buffer.Length); |
|
|
|
} |
|
|
|
#endif
|
|
|
|
int nullCharIndex = result.IndexOf('\0'); |
|
|
|
if (nullCharIndex != -1) |
|
|
|
{ |
|
|
|
result = result.Substring(0, nullCharIndex); |
|
|
|
} |
|
|
|
|
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|