Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
HexConverter.cs
Go to the documentation of this file.
2
3namespace System;
4
5internal static class HexConverter
6{
7 public enum Casing : uint
8 {
9 Upper = 0u,
10 Lower = 8224u
11 }
12
13 [MethodImpl(MethodImplOptions.AggressiveInlining)]
14 public static void ToCharsBuffer(byte value, Span<char> buffer, int startingIndex = 0, Casing casing = Casing.Upper)
15 {
16 uint num = (uint)(((value & 0xF0) << 4) + (value & 0xF) - 35209);
17 uint num2 = ((((0 - num) & 0x7070) >> 4) + num + 47545) | (uint)casing;
18 buffer[startingIndex + 1] = (char)(num2 & 0xFFu);
19 buffer[startingIndex] = (char)(num2 >> 8);
20 }
21
22 public static void EncodeToUtf16(ReadOnlySpan<byte> bytes, Span<char> chars, Casing casing = Casing.Upper)
23 {
24 for (int i = 0; i < bytes.Length; i++)
25 {
26 ToCharsBuffer(bytes[i], chars, i * 2, casing);
27 }
28 }
29
30 public unsafe static string ToString(ReadOnlySpan<byte> bytes, Casing casing = Casing.Upper)
31 {
32 fixed (byte* ptr = bytes)
33 {
34 return string.Create(bytes.Length * 2, ((IntPtr)ptr, bytes.Length, casing), delegate(Span<char> chars, (IntPtr Ptr, int Length, Casing casing) args)
35 {
36 ReadOnlySpan<byte> bytes2 = new ReadOnlySpan<byte>((void*)args.Ptr, args.Length);
37 EncodeToUtf16(bytes2, chars, args.casing);
38 });
39 }
40 }
41
42 [MethodImpl(MethodImplOptions.AggressiveInlining)]
43 public static int FromLowerChar(int c)
44 {
45 switch (c)
46 {
47 case 48:
48 case 49:
49 case 50:
50 case 51:
51 case 52:
52 case 53:
53 case 54:
54 case 55:
55 case 56:
56 case 57:
57 return c - 48;
58 case 97:
59 case 98:
60 case 99:
61 case 100:
62 case 101:
63 case 102:
64 return c - 97 + 10;
65 default:
66 return 255;
67 }
68 }
69
70 [MethodImpl(MethodImplOptions.AggressiveInlining)]
71 public static bool IsHexLowerChar(int c)
72 {
73 if ((uint)(c - 48) > 9u)
74 {
75 return (uint)(c - 97) <= 5u;
76 }
77 return true;
78 }
79}
static void EncodeToUtf16(ReadOnlySpan< byte > bytes, Span< char > chars, Casing casing=Casing.Upper)
static int FromLowerChar(int c)
static bool IsHexLowerChar(int c)
static void ToCharsBuffer(byte value, Span< char > buffer, int startingIndex=0, Casing casing=Casing.Upper)
static unsafe string ToString(ReadOnlySpan< byte > bytes, Casing casing=Casing.Upper)