public void FromBase62Chars11_WithOverlappingInputAndOutputSpans_ShouldReturnExpectedOutput(string text, string base62String) { Span <byte> bytes = stackalloc byte[11]; System.Text.Encoding.UTF8.GetBytes(base62String, bytes); Base62.FromBase62Chars11(bytes, bytes); var originalString = System.Text.Encoding.UTF8.GetString(bytes[..8]);
public void FromBase62Chars11_Regularly_ShouldReturnExpectedOutput(string text, string base62String) { var chars = System.Text.Encoding.UTF8.GetBytes(base62String); Span <byte> outputBytes = stackalloc byte[text.Length]; Base62.FromBase62Chars11(chars, outputBytes); var originalString = System.Text.Encoding.UTF8.GetString(outputBytes); Assert.Equal(text, originalString); }
/// <summary> /// <para> /// Outputs an ID decoded from the given UTF-8 alphanumeric string representation, effectively inverting <see cref="GetAlphanumeric(ulong, Span{byte})"/>. /// </para> /// <para> /// Returns false if the input is not a value encoded using the expected encoding. /// </para> /// </summary> /// <param name="bytes">A sequence of at least 11 input characters.</param> /// <param name="id">On true, this outputs the decoded ID.</param> public static bool TryGetUlong(ReadOnlySpan <byte> bytes, out ulong id) { // Alphanumeric encodings are exactly 11 characters long if (bytes.Length < 11) { id = default; return(false); } Span <byte> outputBytes = stackalloc byte[8]; try { Base62.FromBase62Chars11(bytes, outputBytes); } catch (ArgumentException) { id = default; return(false); } id = BinaryPrimitives.ReadUInt64BigEndian(outputBytes); return(true); }