3111 {
3113 {
3114 bytesConsumed = 0;
3116 return false;
3117 }
3118 ReadOnlySpan<byte> charToHexLookup = HexConverter.CharToHexLookup;
3120 byte b = charToHexLookup[
index];
3121 if (b == byte.MaxValue)
3122 {
3123 bytesConsumed = 0;
3125 return false;
3126 }
3127 uint num = b;
3129 {
3130 for (
int i = 1;
i <
source.Length;
i++)
3131 {
3133 b = charToHexLookup[
index];
3134 if (b == byte.MaxValue)
3135 {
3138 return true;
3139 }
3140 num = (num << 4) + b;
3141 }
3142 }
3143 else
3144 {
3145 for (int j = 1; j < 2; j++)
3146 {
3148 b = charToHexLookup[
index];
3149 if (b == byte.MaxValue)
3150 {
3151 bytesConsumed = j;
3153 return true;
3154 }
3155 num = (num << 4) + b;
3156 }
3157 for (
int k = 2; k <
source.Length; k++)
3158 {
3160 b = charToHexLookup[
index];
3161 if (b == byte.MaxValue)
3162 {
3163 bytesConsumed = k;
3165 return true;
3166 }
3167 if (num > 15)
3168 {
3169 bytesConsumed = 0;
3171 return false;
3172 }
3173 num = (num << 4) + b;
3174 }
3175 }
3176 bytesConsumed =
source.Length;
3178 return true;
3179 }