muduo中有一段高效的整形转换为字符串的算法,这里记录一下(Efficient Integer to String Conversions, by Matthew Wilson)
#include <stdio.h>#include <iostream>#include<algorithm>const char digits[] = "9876543210123456789";const char* zero = digits + 9;//zero两边对称,因为余数可能为负数const char digitsHex[] = "0123456789ABCDEF";//十六进制时使用// Efficient Integer to String Conversions, by Matthew Wilson.void convert(char buf[], int value)//把int转为字符串,{int i = value;char* p = buf;do{int lsd = static_cast<int>(i % 10);i /= 10;*p++ = zero[lsd];} while (i != 0);if (value < 0){*p++ = '-';}*p = '\0';std::reverse(buf, p);//逆转[buf p)}void convertHex(char buf[], uintptr_t value)//转为十六进制字符串{uintptr_t i = value;char* p = buf;do{int lsd = static_cast<int>(i % 16);i /= 16;*p++ = digitsHex[lsd];} while (i != 0);*p = '\0';std::reverse(buf, p);}int main(){printf("zero =%c\n",zero[-3]);int a = -123;char str1[10] = {0};convert(str1,a);printf("str1 =%s\n",str1);int b = 0x111;char str2[10] = {0};convertHex(str2,b);printf("str2 =%s\n",str2);return 0;}
运行:zero =3
str1 =-123
str2 =111
注意zero的用法,这里的整形可能为负数