Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Yet another itoa_10 implementation
- int int_to_string(const int32_t init_value, char* const buffer) {
- char* pstart = buffer;
- uint32_t value;
- if (init_value < 0) {
- value = -init_value;
- *pstart++ = '-';
- } else {
- value = init_value;
- }
- // INT_MAX = 2147483647
- int bufneed;
- if (value >= uint32_t(1e9)) {
- if (value >= uint32_t(2e9)) {
- *pstart++ = '2';
- value -= uint32_t(2e9);
- if (value >= uint32_t(1e8)) {
- *pstart++ = '1';
- value -= uint32_t(1e8);
- } else {
- *pstart++ = '0';
- }
- bufneed = 8;
- } else {
- *pstart++ = '1';
- bufneed = 9;
- }
- } else {
- // 123456789
- if (value >= uint32_t(1e4)) {
- if (value >= uint32_t(1e6)) {
- if (value >= uint32_t(1e8)) {
- bufneed = 9;
- } else if (value >= uint32_t(1e7)) {
- bufneed = 8;
- } else {
- bufneed = 7;
- }
- } else if (value >= uint32_t(1e5)) {
- bufneed = 6;
- } else {
- bufneed = 5;
- }
- } else if (value >= uint32_t(1e2)) {
- if (value >= uint32_t(1e3)) {
- bufneed = 4;
- } else {
- bufneed = 3;
- }
- } else if (value >= uint32_t(1e1)) {
- bufneed = 2;
- } else {
- pstart[0] = '0' + value;
- pstart[1] = '\0';
- return int(&pstart[1] - buffer);
- }
- }
- char* pend = pstart + bufneed;
- int res = int(pend - buffer);
- *pend-- = '\0';
- while (value > 0) {
- *pend-- = '0' + value % 10;
- value /= 10;
- }
- while (pend >= pstart) {
- *pend-- = '0';
- }
- return res;
- }
Advertisement
Add Comment
Please, Sign In to add comment