http://haixiang189.blog.163.com/blog/static/31647695201141135131234/
在C++的程序开发中,经常需要将不同基本类型的值进行转换,在VS2008中的VC项目中,如果直接用itoa这个函数,在编译的时候会有警告说让你用_itoa,然后你用_itoa的时候呢,它又有警告说要用_itoa_s这个函数才行。
_itoa_s和itoa是有区别的,_itoa_s(int ,char *,int ,int )有四个参数,比itoa的参数个数要多一些,_itoa_s函数的四个参数的意思分别是:
第一个参数是你要转换的整形变量
第二个参数是转换后存放结果的字符串指针
第三个参数是第一个参数的进制表示,如二进制,十进制,八进制,16进制这样的值。
这里有问题,第三个参数应该是字符长度
http://msdn.microsoft.com/en-us/library/0we9x30h(v=vs.80).aspx(参见msdn)
函数原型:
(
errno_t _itoa_s( int value, char *buffer, size_t sizeInCharacters, int radix );第四个参数是转换后的字符串结果数的进制表示,如二进制,十进制,八进制,16进制这样的值,
这是在VS中的方法,不过还是建议多用标准C++中的函数,这样如果存在代码移植的情况时,需要改动的就小很多了。然而在实际的应用当中,还是建议大家用sprintf这个函数,在VS中用这个函数会有警告,没关系,可以不理它,用它的好处时,将数字类型的值转为相用的字符串时,可以格式化,即不足位可以自动补0进行占位,而_itoa_s则不会自动进行补位,很多时侯我们是需要固定长度的字符串的,这种情况下_itoa_s就麻烦一些,需要自己另外去补齐,而sprintf这个函数恰恰能自动完成这个过程,例如要把254转为固定4个字符的16进制字符串:
char str[4];
memset(str,0,4);
sprintf(254,"%04X",str);
这样处理后,字符串str的值是00FE,前面的不足位自动补0进行占位。