/// <summary> /// 数字转换成字符串 /// </summary> /// <param name="value">数字值</param> /// <param name="jsonStream">JSON输出流</param> public unsafe static void ToString(sbyte value, charStream jsonStream) { if (value == 0) { jsonStream.Write('0'); } else { if (value < 0) { char *chars = jsonStream.GetPrepLengthCurrent(5); uint value32 = (uint)-(int)value; *(int *)chars = '-' + ('0' << 16); *(chars + 2) = 'x'; *(chars + 3) = (char)((value32 >> 4) + '0'); *(chars + 4) = (char)number.ToHex(value32 & 15); jsonStream.UnsafeAddLength(5); } else { char *chars = jsonStream.GetPrepLengthCurrent(4); uint value32 = (uint)(int)value; *(int *)chars = '0' + ('x' << 16); *(chars + 2) = (char)((value32 >> 4) + '0'); *(chars + 3) = (char)number.ToHex(value32 & 15); jsonStream.UnsafeAddLength(4); } } }
/// <summary> /// 数字转换成字符串 /// </summary> /// <param name="value"></param> /// <param name="jsonStream"></param> private unsafe static void toString(ulong value, charStream jsonStream) { if (value <= uint.MaxValue) { ToString((uint)value, jsonStream); } else { char *chars = jsonStream.GetPrepLengthCurrent(18), next; uint value32 = (uint)(value >> 32); *(int *)chars = '0' + ('x' << 16); if (value32 >= 0x10000) { next = getToHex(value32 >> 16, chars + 2); toHex16(value32 & 0xffff, next); next += 4; } else { next = getToHex(value32, chars + 2); } toHex16((value32 = (uint)value) >> 16, next); toHex16(value32 & 0xffff, next + 4); jsonStream.UnsafeAddLength((int)(next - chars) + 8); } }
/// <summary> /// 字符 /// </summary> /// <param name="value">字符</param> /// <param name="jsonStream">JSON输出流</param> public unsafe static void ToString(char value, charStream jsonStream) { char *chars = jsonStream.GetPrepLengthCurrent(3); *chars = Quote; *(chars + 1) = value; *(chars + 2) = Quote; jsonStream.UnsafeAddLength(3); }
/// <summary> /// Guid转换成字符串 /// </summary> /// <param name="value">Guid</param> /// <param name="jsonStream">JSON输出流</param> public unsafe static void ToString(ref Guid value, charStream jsonStream) { byte *data = (byte *)jsonStream.GetPrepLengthCurrent(38); *(char *)data = fastCSharp.web.ajax.Quote; new guid { Value = value }.ToString((char *)(data + sizeof(char))); *(char *)(data + sizeof(char) * 37) = fastCSharp.web.ajax.Quote; jsonStream.UnsafeAddLength(38); }
/// <summary> /// 数字转换成字符串 /// </summary> /// <param name="value">数字值</param> /// <param name="jsonStream">JSON输出流</param> public unsafe static void ToString(ushort value, charStream jsonStream) { char *chars; if (value < 10000) { if (value < 10) { jsonStream.Write((char)(value + '0')); return; } int div10 = (value * (int)fastCSharp.number.Div10_16Mul) >> fastCSharp.number.Div10_16Shift; if (div10 < 10) { *(chars = jsonStream.GetPrepLengthCurrent(2)) = (char)(div10 + '0'); *(chars + 1) = (char)((value - div10 * 10) + '0'); jsonStream.UnsafeAddLength(2); return; } int div100 = (div10 * (int)fastCSharp.number.Div10_16Mul) >> fastCSharp.number.Div10_16Shift; if (div100 < 10) { *(chars = jsonStream.GetPrepLengthCurrent(3)) = (char)(div100 + '0'); *(chars + 1) = (char)((div10 - div100 * 10) + '0'); *(chars + 2) = (char)((value - div10 * 10) + '0'); jsonStream.UnsafeAddLength(3); return; } int div1000 = (div100 * (int)fastCSharp.number.Div10_16Mul) >> fastCSharp.number.Div10_16Shift; *(chars = jsonStream.GetPrepLengthCurrent(4)) = (char)(div1000 + '0'); *(chars + 1) = (char)((div100 - div1000 * 10) + '0'); *(chars + 2) = (char)((div10 - div100 * 10) + '0'); *(chars + 3) = (char)((value - div10 * 10) + '0'); jsonStream.UnsafeAddLength(4); return; } *(int *)(chars = jsonStream.GetPrepLengthCurrent(6)) = '0' + ('x' << 16); toHex16(value, chars + 2); jsonStream.UnsafeAddLength(6); }
/// <summary> /// 数字转换成字符串 /// </summary> /// <param name="value">数字值</param> /// <param name="jsonStream">JSON输出流</param> public unsafe static void ToString(byte value, charStream jsonStream) { if (value == 0) { jsonStream.Write('0'); } else { byte *chars = (byte *)jsonStream.GetPrepLengthCurrent(4); *(int *)chars = '0' + ('x' << 16); *(char *)(chars + sizeof(char) * 2) = (char)number.ToHex((uint)value >> 4); *(char *)(chars + sizeof(char) * 3) = (char)number.ToHex((uint)value & 15); jsonStream.UnsafeAddLength(4); } }
/// <summary> /// 数字转换成字符串 /// </summary> /// <param name="value">数字值</param> /// <param name="jsonStream">JSON输出流</param> public unsafe static void ToString(uint value, charStream jsonStream) { if (value <= ushort.MaxValue) { ToString((ushort)value, jsonStream); } else { char *chars = jsonStream.GetPrepLengthCurrent(10); *(int *)chars = '0' + ('x' << 16); char *next = getToHex(value >> 16, chars + 2); toHex16(value & 0xffff, next); jsonStream.UnsafeAddLength((int)(next - chars) + 4); } }
/// <summary> /// 输出非数字值 /// </summary> public unsafe static void WriteNaN(charStream jsonStream) { *(long *)jsonStream.GetPrepLengthCurrent(4) = 'N' + ('a' << 16) + ((long)'N' << 32); jsonStream.UnsafeAddLength(3); }
/// <summary> /// 输出null值 /// </summary> public unsafe static void WriteNull(charStream jsonStream) { *(long *)jsonStream.GetPrepLengthCurrent(4) = 'n' + ('u' << 16) + ((long)'l' << 32) + ((long)'l' << 48); jsonStream.UnsafeAddLength(4); }
/// <summary> /// 输出空数组 /// </summary> public unsafe static void WriteArray(charStream jsonStream) { *(int *)jsonStream.GetPrepLengthCurrent(2) = '[' + (']' << 16); jsonStream.UnsafeAddLength(2); }
/// <summary> /// 输出空对象 /// </summary> public unsafe static void WriteObject(charStream jsonStream) { *(int *)jsonStream.GetPrepLengthCurrent(2) = '{' + ('}' << 16); jsonStream.UnsafeAddLength(2); }