Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ LongToString()

static unsafe string System.ParseNumbers.LongToString ( long n,
int radix,
int width,
char paddingChar,
int flags )
inlinestatic

Definition at line 271 of file ParseNumbers.cs.

272 {
273 Span<char> span = stackalloc char[67];
274 if (radix < 2 || radix > 36)
275 {
276 throw new ArgumentException(SR.Arg_InvalidBase, "radix");
277 }
278 bool flag = false;
279 ulong num;
280 if (n < 0)
281 {
282 flag = true;
283 num = (ulong)((10 == radix) ? (-n) : n);
284 }
285 else
286 {
287 num = (ulong)n;
288 }
289 if (((uint)flags & 0x40u) != 0)
290 {
291 num &= 0xFF;
292 }
293 else if (((uint)flags & 0x80u) != 0)
294 {
295 num &= 0xFFFF;
296 }
297 else if (((uint)flags & 0x100u) != 0)
298 {
299 num &= 0xFFFFFFFFu;
300 }
301 int num2;
302 if (num == 0L)
303 {
304 span[0] = '0';
305 num2 = 1;
306 }
307 else
308 {
309 num2 = 0;
310 for (int i = 0; i < span.Length; i++)
311 {
312 ulong num3 = num / (ulong)radix;
313 int num4 = (int)((long)num - (long)num3 * (long)radix);
314 num = num3;
315 span[i] = ((num4 < 10) ? ((char)(num4 + 48)) : ((char)(num4 + 97 - 10)));
316 if (num == 0L)
317 {
318 num2 = i + 1;
319 break;
320 }
321 }
322 }
323 if (radix != 10 && ((uint)flags & 0x20u) != 0)
324 {
325 if (16 == radix)
326 {
327 span[num2++] = 'x';
328 span[num2++] = '0';
329 }
330 else if (8 == radix)
331 {
332 span[num2++] = '0';
333 }
334 else if (((uint)flags & 0x4000u) != 0)
335 {
336 span[num2++] = '#';
337 span[num2++] = (char)(radix % 10 + 48);
338 span[num2++] = (char)(radix / 10 + 48);
339 }
340 }
341 if (10 == radix)
342 {
343 if (flag)
344 {
345 span[num2++] = '-';
346 }
347 else if (((uint)flags & 0x10u) != 0)
348 {
349 span[num2++] = '+';
350 }
351 else if (((uint)flags & 8u) != 0)
352 {
353 span[num2++] = ' ';
354 }
355 }
356 string text = string.FastAllocateString(Math.Max(width, num2));
357 fixed (char* ptr = text)
358 {
359 char* ptr2 = ptr;
360 int num5 = text.Length - num2;
361 if (((uint)flags & (true ? 1u : 0u)) != 0)
362 {
363 for (int j = 0; j < num5; j++)
364 {
365 *(ptr2++) = paddingChar;
366 }
367 for (int k = 0; k < num2; k++)
368 {
369 *(ptr2++) = span[num2 - k - 1];
370 }
371 }
372 else
373 {
374 for (int l = 0; l < num2; l++)
375 {
376 *(ptr2++) = span[num2 - l - 1];
377 }
378 for (int m = 0; m < num5; m++)
379 {
380 *(ptr2++) = paddingChar;
381 }
382 }
383 }
384 return text;
385 }

References System.SR.Arg_InvalidBase, System.L, System.Span< T >.Length, System.Math.Max(), and System.text.

Referenced by System.Convert.ToString().