Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void
- __CRT_ulltoa(uint64_t val, /*not const*/ char* buf, size_t bufSz, int mode)
- {
- if (val)
- {
- uint64_t val2 = val;
- switch (mode)
- {
- case 0:
- case 3:
- default:
- {
- if (mode == 3)
- val2 = __CRT_dectooctll(val);
- int bufferIndex = 0;
- while (1)
- {
- unsigned long long mod = val2 % 10;
- __CRT_itoa_internalBuffer[bufferIndex++] = (char)mod;
- val2 = val2 / 10;
- if (!val2)
- break;
- }
- if (bufferIndex)
- {
- int dstBufInd = 0;
- for (int i = 0; i < bufferIndex; ++i)
- {
- buf[dstBufInd++] = __CRT_itoa_internalBuffer[bufferIndex - i - 1] + '0';
- if (dstBufInd == bufSz)
- break;
- }
- buf[dstBufInd] = 0;
- }
- }
- break;
- case 1:
- case 2:
- {
- int bsz = 0;
- char hexbuf[10];
- __CRT_dectohex(val, hexbuf, &bsz);
- if (bsz)
- {
- for (int i = 0; i < bsz; ++i)
- {
- buf[i] = hexbuf[i];
- buf[i + 1] = 0;
- }
- }
- if (mode == 2)
- {
- for (size_t i2 = 0; i2 < bufSz; ++i2)
- {
- if (islower(buf[i2]))
- buf[i2] = toupper(buf[i2]);
- if (!buf[i2])
- break;
- }
- }
- }break;
- }
- }
- else
- {
- buf[0] = '0';
- buf[1] = 0;
- }
- }
- char __CRT_itoa_buffer[31]; // for vsnprintf
- // `buf` is a __CRT_dtoa_buffer if it called by __CRT_vsnprintf
- // I can use __CRT_itoa_buffer here for i1 and i2
- void
- _C_DECL
- __CRT_dtoa(double val, char* buf, size_t bufSz, int mode)
- {
- int isMinus = 0;
- if (val < 0.0)
- isMinus = 1;
- int bufInd = 0;
- if (isMinus)
- {
- buf[bufInd++] = '-';
- buf[bufInd] = 0;
- }
- double ipart = 0.0;
- double in = modf(val, &ipart);
- in *= 10000000000000000;
- uint64_t i1 = (uint64_t)ipart;
- uint64_t i2 = (uint64_t)in;
- __CRT_ulltoa(i1, __CRT_itoa_buffer, 30, 0);
- if (__CRT_itoa_buffer[0])
- {
- for(int i = 0; i < 30; ++i)
- {
- if (!__CRT_itoa_buffer[i])
- break;
- buf[bufInd++] = __CRT_itoa_buffer[i];
- buf[bufInd] = 0;
- if (bufInd == bufSz)
- return;
- }
- }
- struct lconv* loc = localeconv();
- buf[bufInd++] = loc->decimal_point[0];
- buf[bufInd] = 0;
- if (bufInd == bufSz)
- return;
- __CRT_ulltoa(i2, __CRT_itoa_buffer, 30, 0);
- if (__CRT_itoa_buffer[0])
- {
- for (int i = 0; i < 30; ++i)
- {
- if (!__CRT_itoa_buffer[i])
- break;
- buf[bufInd++] = __CRT_itoa_buffer[i];
- buf[bufInd] = 0;
- if (bufInd == bufSz)
- return;
- }
- }
- buf[bufInd] = 0;
- }
- void
- __CRT_ftoa(float val, char* buf, size_t bufSz, int mode)
- {
- __CRT_dtoa(val, buf, bufSz, mode);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement